美文网首页iOS Developer
iOS 9新特性之关键字

iOS 9新特性之关键字

作者: lancely | 来源:发表于2017-02-15 14:22 被阅读36次

    iOS 9 出了一些新的关键字诸如:nullablenonnullnull_resettablenull_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];
    }
    

    相关文章

      网友评论

        本文标题:iOS 9新特性之关键字

        本文链接:https://www.haomeiwen.com/subject/jjdqwttx.html