考虑以下方法
- (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
使用新的
nonnull
和nullable
annotation keywords,我们可以按以下方式丰富它:- (void)methodWithArg:(nonnull NSString *)arg1 andArg:(nullable NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
但我们也会收到以下警告:
它引用第三个参数(块一)。
documentation不包含如何指定块参数的可空性的示例。它说了逐字
我尝试将两个关键字之一放在该块上(任何位置),但没有任何运气。还尝试了下划线前缀的变体(
__nonnull
和__nullable
)。因此,我的问题是:如何为块参数指定可为空的语义?
最佳答案
这似乎正在工作
- (void)methodWithArg:(nonnull NSString *)arg1
andArg:(nullable NSString *)arg2 completionHandler:(nullable void (^)
(NSArray * _Nullable results, NSError * _Nonnull error))completionHandler
您需要为块及其参数指定可空性...
编辑:有关更多信息,请参见Swift Blog
关于objective-c - 如何在基于块的API方法中使用非空和可空的Objective-C关键字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29647919/