Рассмотрим следующий метод
- (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;
но мы также получаем это предупреждение:
В указателе отсутствует спецификатор типа nullability (__nonnull или __nullable)
Он ссылается на третий параметр (первый блок).
Документация не содержит примеров того, как указать допустимость параметров блока. Он утверждает дословно
Вы можете использовать незанятые формы с нулевым значением и ненулевым после открытой круглой скобки, если тип является простым объектом или указатель блока.
Я попытался поставить одно из двух ключевых слов для блока (в любой позиции) без всякой удачи. Также попытались использовать префиксные символы подчеркивания (__nonnull
и __nullable
).
Поэтому мой вопрос: как я могу указать семантику неопределенности для параметров блока?