考虑以下方法

- (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;

使用新的nonnullnullable 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/

10-12 14:14