美文网首页
ios 9.0之后 添加的关键字

ios 9.0之后 添加的关键字

作者: Mr_Candy | 来源:发表于2017-01-08 18:35 被阅读14次

    在iOS9.0 之后添加了一些新的关键字, 在这里复习一下, 顺便做个总结, 以便于让自己的代码更加规范。

    常用关键字:

    1. nonnull \ __nonnull :这个属性 代表setter 和 getter 都不能为nil 
    使用方法:
    @property (nonatomic, strong, nonnull) NSArray *names;
    @property (nonatomic, strong) NSArray * __nonnull names;
    

    2. nullable \ __nullable :这个属性代表 setter 和 getter 都可以为nil
    使用方法:
    @property (nonatomic, strong, nullable) NSArray *names;
    @property (nonatomic, strong) NSArray * __nullable names; 
    温馨提示:
    默认情况下 属性不加nullable, setter 和 getter 也都是可以为nil,加上nullable 更多的作用在于程序员之间的沟通交流(提醒同事某个属性可能是nil)
    

    3.null_resettable : setter可以为nil, getter不可以为nil
    @property (null_resettable, nonatomic, strong) NSArray *names;
    

    4.NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END之间的所有属性默认都是nonnull
    

    泛型:

    1. 常用的泛型 标明数组中装的东西, 便于使用
       @property (nonatomic, strong) NSMutableArray<NSString *> *names;
       @property (nonatomic, strong) NSMutableDictionary<NSString *, NSNumber *> *books; 
    

    2.自定义泛型
       Bag<Book *> *bag1 = [[Bag alloc] init];
      [bag1 get:0];    
      Bag<Car *> *bag2 = [[Bag alloc] init];
      [bag2 get:0];
      另外一个类写法:
    @interface Bag<__contravariant ObjectType> : NSObject
     - (void)add:(ObjectType)object;
     - (ObjectType)get:(int)index;
    @end
    

    3. 
    __covariant : 小类型(泛型类的子类类型) -> 大类型(泛型类的父类类型) 时, 不会报⚠️
    __contravariant : 大类型(泛型类的父类类型) -> 小类型(泛型类的子类类型)时, 不会报⚠️
    

    __kindof

     1. 一个方法中 返回参数中修饰符添加 __kindof 
     目的是:告诉编译器返回值可能是一个类(NSString),也可能是这个类的子类(NSMutableString)这样在调用时, 不用进行强制转换

    相关文章

      网友评论

          本文标题:ios 9.0之后 添加的关键字

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