考虑以下方法
- (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
Run Code Online (Sandbox Code Playgroud)
使用new nonnull和nullable annotation关键字,我们可以丰富它如下:
- (void)methodWithArg:(nonnull NSString *)arg1 andArg:(nullable NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
Run Code Online (Sandbox Code Playgroud)
但是我们也得到了这个警告:
指针缺少可为空类型说明符(__nonnull或__nullable)
它指的是第三个参数(块1).
本文档未介绍如何指定块参数的可为空性的示例.它逐字陈述
只要类型是简单对象或块指针,就可以在打开括号后立即使用非下划线形式为nullable和nonnull.
我尝试将两个关键字中的一个放在块中(在任何位置),没有任何运气.还尝试了下划线前缀变体(__nonnull和__nullable).
因此我的问题是:如何为块参数指定可空性语义?