iOS 9 出了一些新的关键字诸如:nullable
,nonnull
,null_resettable
,null_unspecified
,__kindof
等,可用于属性、方法返回值或参数中
- 关键字作用:起提示作用,告诉开发者属性信息
- 关键字目的:迎合 swift(swift 是强语言,必须要指定一个对象是否为空)
- 关键字好处:提高代码规划,减少沟通成本
需要注意的是,这些关键字不能用于基本数据类型,且仅仅是提供警告作用,并不会报编译错误
nullable
作用:表示值可能为空
语法如下
// 语法1
@property (nonatomic, copy, nullable) NSString *name;
// 语法2
@property (nonatomic, copy) NSString * _Nullable name;
// 语法3
@property (nonatomic, copy) NSString * __nullable name;
nonnull
作用:表示值不能为空
语法如下
// 语法1
@property (nonatomic, copy, nonnull) NSString *name;
// 语法2
@property (nonatomic, copy) NSString * _Nonnull name;
// 语法3
@property (nonatomic, copy) NSString * __nonnull name;
null_resettable
作用:get 方法不能返回 nil,set 方法可以传入为空(如 UIViewController 的 view 属性)
注意:null_resettable
必须要处理为空的情况,需要重写 get 方法
语法如下
@interface Model ()
// 只有1种语法
@property (nonatomic, copy, null_resettable) NSString *name;
@end
@implementation Model
- (NSString *)name {
if (_name == nil) {
_name = @"";
}
return _name;
}
@end
null_unspecified
作用:不确定是否为空(不常用)
语法如下
// 语法1
@property (nonatomic, copy, null_unspecified) NSString *name;
// 语法2
@property (nonatomic, copy) NSString * _Null_unspecified name;
// 语法3
@property (nonatomic, copy) NSString * __null_unspecified name;
__kindof
作用:表示当前类或者它的子类
用于属性中,表示属性 childControllers
可以存放 UIViewController 及 UIViewController 的子类对象,如 UIViewController、UITableViewController 等
@property(nonatomic, copy) NSArray<__kindof UIViewController *> *childControllers;
用于参数中,表示参数 view
可以存放 UIView 及 UIView 的子类对象,如 UIView、UIButton 等
- (void)addSubview:(__kindof UIView *)view {
[self.view addSubview:view];
}
网友评论