我知道使用nonnull
和nullable
的方式是
nonnull: the value won’t be nil; bridges to a regular reference.
nullable: the value can be nil; bridges to an optional.
但就我而言,titleColor
似乎同时为nullable
和nonnull
。它是nullable
,因为我们可能不需要设置值nonnull
,因为它始终具有默认值。我是否理解正确,在我的情况下,我应该选择哪个可空或非空?
// IN .h file
@property(nonatomic, strong) UIColor *titleColor;
// @property(nonatomic, strong, nullable) UIColor *titleColor;
// IN .m file
-(UIColor *)titleColor{
if(!_titleColor){
_titleColor = [UIColor greenColor];
}
return _titleColor;
}
答案 0 :(得分:4)
如果设置者不接受nonnull
并且获取者不会返回nil
,请使用nil
。
如果设置者接受nullable
或者获取者将返回nil
,请使用nil
。
请记住,Objective-C并不真正关心你的实际行动。
因此,如果在Swift中您使用可选项,则将其设为nullable
,否则将其设为nonnull
。
答案 1 :(得分:0)
使用可空
null_unspecified :桥接到Swift隐式解包的可选项。这是默认值。
nonnull:该值不会为零;桥接到常规参考。
可以为空:值可以为零;桥接到可选。
null_resettable :读取时该值永远不能为nil,但您可以将其设置为nil以重置它。仅适用于属性。
代码示例:
// property style
@property (nonatomic, strong, null_resettable) NSString *name;
// pointer style
+ (NSArray<NSView *> * _Nullable)interestingObjectsForKey:(NSString * _Nonnull)key;
// these two are equivalent!
@property (nonatomic, strong, nullable) NSString *identifier1;
@property (nonatomic, strong) NSString * _Nullable identifier2;
更好的描述:https://swiftunboxed.com/interop/objc-nullability-annotations/
来自http://clang.llvm.org/docs/AttributeReference.html#nullability-attributes
nullability(type)限定符表示给定指针类型的值是否为null(_Nullable限定符),null(_Nonnull限定符)没有定义的含义,或者null的目的是不清楚(_Null_unspecified限定符)。因为可空性限定符在类型系统中表示,所以它们比nonnull和returns_nonnull属性更通用,允许表达(例如)可空指针到非空指针数组。可空性限定符被写在它们应用的指针的右侧。
Apple swift doc:https://developer.apple.com/swift/blog/?id=25