最佳答案
考虑以下方法
- (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)
It refers to the third parameter (the block one).
The 文件 doesn't cover with examples how to specify the nullability of block parameters. It states verbatim
您可以立即使用非下划线的可空和非空表单 在开括号之后,只要类型是一个简单的对象或 block pointer.
我尝试把两个关键字之一的块(在任何位置)没有任何运气。还尝试了下划线前缀变体(__nonnull
和 __nullable
)。
因此,我的问题是: 如何为块参数指定空性语义?