可空
我发现这种语法相当混乱:
- (void)doSomething:(nullable void (^)(NSArray * _Nullable transactions))successBlock
failure:(nullable void (^)(NSError * _Nullable error))failureBlock;
...不仅因为nullable
和_Nullable
之间的二元性,而且因为虽然具有相同的意图,但它们不可互换。
在Nullability and Objective-C中找到:
nullable
__nullable
是Xcode 6.3和7.0 nullable
的旧名称
_Nullable
,您可以使用const
这在上面的示例中没有多大意义,因为我还没有将void
定义为const void
。是否存在可以互换使用的甚至更好的可空版本?
_Nnnull , _Null_unspecified
同样的难题。
答案 0 :(得分:3)
nullable
是Objective C语言语法。 _Nullable
是C语言扩展,由Objective C继承。
函数和块是C语言的一部分,因此必须在这些声明中使用_Nullable
。 Objective C方法和属性声明可以使用Objective C' nullable
或C' _Nullable
。
顺便说一下,C函数指针和块语法在最好的时候是混乱的。使用typedef简化复杂情况通常是个好主意。
typedef void (^SuccessBlock)(NSArray* _Nullable transactions);
- (void)doSomething:(nullable SuccessBlock)successHandler;