美文网首页
iOS9新特性之常见关键字

iOS9新特性之常见关键字

作者: CoderShmily | 来源:发表于2017-05-05 11:38 被阅读8次

    iOS9新出的关键字,用来修饰属性,或者方法的参数,方法的返回值
    好处:

    • 迎合swift
    • 提高我们开发人员开发规范,减少程序员之间的交流

    nullable和nonnull

    nullable:表示可以为空,nonnull为非空
    只能修饰对象,不能修饰int等,因为nil只能赋值给对象
    书写规范一样,以nullable为例:

    • 方式一:
    @property (nonatomic, strong, nullable) NSString *name;
    
    • 方式二:
    @property (nonatomic, strong) NSString *_Nullable name;
    
    • 方式三:
    @property (nonatomic, strong) NSString *__nullable name;
    
    • 方式四:修饰方法
    - (nonnull NSString *)name:(nonnull NSString *)str;
    - (NSString *_Nonnull)name;
    
    • 方式五:

    NS_ASSUME_NONNULL_BEGINNS_ASSUME_NONNULL_END之间定义的所有对象属性和方法默认都是nonnull

    NS_ASSUME_NONNULL_BEGIN
    @property (nonatomic, strong) NSString *name;
    NS_ASSUME_NONNULL_END
    

    null_resettable

    // null_resettable:get不能返回空,set可以为空(比如控制器的view)
    @property (nonatomic, copy, null_resettable) NSString *name;
    

    null_resettable必须重写setter或者getter方法,处理传递的值为空的情况(实际重写不判断为空警告也没了),不然会有警告。

    null_unspecified

    null_unspecified不确定是否为空

    @property (nonatomic, strong) NSString *_Null_unspecified name;
    @property (nonatomic, strong, null_unspecified) NSString *name;
    

    泛型

    泛型:限制类型
    泛型使用场景:

    • 在集合(数组、字典、NSSet)中使用泛型比较常见。
    • 当声明一个类。类里面的某些属性的类型不确定,这时候我们才使用泛型。

    泛型好处:

    • 提高开发规范,减少程序员之间交流
    • 通过集合取出来对象,直接当做泛型对象使用,可以直接使用点语法
    @property (nonatomic, strong) NSArray<NSString *> *nameArr;
    
    // 后面使用时可以直接调出对应的方法
    self.nameArr[0].length;
    
    // ObjectType可以自己指定名字
    @interface Person<ObjectType> : NSObject
    @property (nonatomic) ObjectType language;
    
    - (ObjectType)language;
    @end
    
    Person<NSString *> *p = [Person new];
    p.language = @"ss";
    

    __covariant

    (协变): 用于泛型数据强转类型,可以向上强转,子类可以转成父类。

    @interface Person<__covariant ObjectType> : NSObject
    
    @property (nonatomic) ObjectType language;
    
    - (ObjectType)language;
    @end
    

    __contravariant

    (逆变): 用于泛型数据强转类型,可以向下强转,父类可以转成子类。

    @interface Person<__contravariant ObjectType> : NSObject
    @end
    

    __kindof

    __kindof表示当前类或者它的子类
    好处:

    • 可以在编译的时候,检查真实类型
    • 返回值会有提示修饰的当前类
    @property (nonatomic, strong) NSArray<__kindof NSString *> *nameArr;
    
    - (__kindof NSString *)test;
    

    相关文章

      网友评论

          本文标题:iOS9新特性之常见关键字

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