Как использовать ненулевые и обнуляемые ключевые слова Objective C в блочном методе API
Рассмотрим следующий метод
- (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
С новымnonnull
а такжеnullable
ключевые слова аннотации мы можем обогатить его следующим образом:
- (void)methodWithArg:(nonnull NSString *)arg1 andArg:(nullable NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
но мы также получаем это предупреждение:
В указателе отсутствует спецификатор типа обнуляемости (__nonnull или __nullable)
Это относится к третьему параметру (блок один).
документация не приводятся примеры того, как задать обнуляемость параметров блока. Это говорит дословно
Вы можете использовать формы без подчеркивания, которые могут иметь значение NULL и NULL, сразу после открытых скобок, если тип является простым указателем на объект или блок.
Я попытался поставить одно из двух ключевых слов для блока (в любой позиции) без какой-либо удачи. Также попробовал варианты с префиксом подчеркивания (__nonnull
а также__nullable
).
Поэтому мой вопрос: как я могу указать семантику обнуляемости для параметров блока?