小编alb*_*oli的帖子

如何在基于块的API方法中使用非空和可空的Objective-C关键字

考虑以下方法

- (void)methodWithArg:(NSString *)arg1 andArg:(NSString *)arg2 completionHandler:(void (^)(NSArray *results, NSError *error))completionHandler;
Run Code Online (Sandbox Code Playgroud)

使用new nonnullnullable 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).

因此我的问题是:如何为块参数指定可空性语义?

xcode nullable block objective-c

96
推荐指数
2
解决办法
6万
查看次数

标签 统计

block ×1

nullable ×1

objective-c ×1

xcode ×1