iOS Developer

iOS 9新特性之关键字

2017-02-15  本文已影响36人  lancely

iOS 9 出了一些新的关键字诸如:nullablenonnullnull_resettablenull_unspecified__kindof 等,可用于属性、方法返回值或参数中

需要注意的是,这些关键字不能用于基本数据类型,且仅仅是提供警告作用,并不会报编译错误

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];
}
上一篇下一篇

猜你喜欢

热点阅读