考虑以下方法
- (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
使用new nonnull
和nullable
注解关键字,我们可以按如下方式丰富它:
- (void)methodWithArg:(nonnull NSString *)arg1 andArg:(nullable NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
但我们也会收到以下警告:
指针缺少可空性类型说明符(__nonnull或__nullable)
它引用第三个参数(块一)。
该文档没有提供有关如何指定块参数的可空性的示例。它说逐字记录
只要类型是简单的对象或块指针,就可以在圆括号后立即使用非下划线形式的nullable和nonnull。
我尝试将两个关键字之一放在该块上(任何位置),但没有任何运气。还尝试了下划线前缀的变体(__nonnull
和__nullable
)。
因此,我的问题是:如何为块参数指定可为空的语义?
NSError **
类型如何工作?我似乎无法使编译器满意。