美文网首页
iOS关键字用法 - nullability annotatio

iOS关键字用法 - nullability annotatio

作者: JonorZhang | 来源:发表于2018-08-25 15:46 被阅读42次

    以下关键字只能修饰strong/copy/block指针类型的对象,不能修饰assign基本数据类型
    使用关键字好处: 提高代码规范, 减少BUG几率

    • 不允许为空
    //  nonnull、_Nonnull、__nonnull 
    @property (nonatomic, copy, nonnull) NSString *name;
    @property (nonatomic, copy) NSString * _Nonnull name;
    @property (nonatomic, copy) NSString * __nonnull name;
    - (nonnull NSString *)funcName:(nonnull NSString *)name;
    - (NSString * _Nonnull)funcName:(NSString * _Nonnull)name;
    typedef void (^BlockHandler)(NSArray * _Nonnull list, NSError * _Nonnull error);
    
    • 可以为空
    // nullable、_Nullable、__nullable
    @property (nonatomic, copy, nullable) NSString *name;
    @property (nonatomic, copy) NSString * _Nullable name;
    @property (nonatomic, copy) NSString * __nullable name;
    - (nullable NSString *)funcName:(nullable NSString *)name;
    - (NSString * _Nullable)funcName:(NSString * _Nullable)name;
    typedef void (^BlockHandler)(NSArray * _Nullable list, NSError * _Nullable error);
    
    • get不能为空,set可以为空
    // null_resettable 
    使用null_resettable关键字的属性, 必须重写get方法或者set方法, 处理传递的值为空的情况
    
    @property (nonatomic, copy, null_resettable) NSString *name; 
    
    - (NSString *)name {
        if (_name == nil) {
            _name = @"DefaultName";
        }
        return _name;
    }
    
    • 未知是否为空
    // null_unspecified、__null_unspecified、_Null_unspecified 
    @property (nonatomic, strong, null_unspecified) NSString *name;
    @property (nonatomic, strong) NSString *__null_unspecified name; 
    @property (nonatomic, strong) NSString *_Null_unspecified name;
    
    • 某区域关键字统一声明

    为了简化关键字声明的过程,通常使用NS_ASSUME_NONNULL_BEGIN、NS_ASSUME_NONNULL_END来声明代码区域之间的所有对象属性和方法默认为nonnull, 需要为nil的地方手动设为nullable。

    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface Person: NSObject
    
    // nonnull
    @property (nonatomic, strong) NSString *name;
    // nullable
    @property (nonatomic, strong, nullable) NSString *identify;
    
    @end
    
    NS_ASSUME_NONNULL_END
    
    • 复杂指针

    复杂的指针类型(如id *)必须显示去指定是nonnull还是nullable。例如,指定一个指向nullable对象的nonnull指针,可以使用__nullable id * __nonnull

    参考资料:

    iOS9的几个新关键字
    iOS关键字详解
    Nullability and Objective-C

    相关文章

      网友评论

          本文标题:iOS关键字用法 - nullability annotatio

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