可空和安全之间有什么区别? _Nullable

时间:2016-01-19 17:35:57

标签: objective-c xcode

可空

我发现这种语法相当混乱:

- (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

同样的难题。

1 个答案:

答案 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;