iOS 关键字
2019-07-18 本文已影响0人
CrazyItCoder
关键字可用于属性、方法参数和返回值参数中
关键字作用:提示作用,告诉开发者属性信息
关键字好处:提高代码规划,减少沟通成本。
关键字仅仅是提供警告并不会报编译错误
宏:NS_ASSUME_NONNULL_BEGIN、NS_ASSUME_NONNULL_END
在NS_ASSUME_NONNULL_BEGIN
和NS_ASSUME_NONNULL_END
之间默认是nonnull
。
nonnull、_Nonnull、__nonnull
nonnull即字面意思:提示不能为空。
// 语法1
@property (nonnull, nonatomic, copy) NSString *name;
// 语法2
@property (nonatomic, copy) NSString * _Nonnull name;
// 语法3
@property (nonatomic, copy) NSString * __nonnull name;
// 参数和返回值都不能为空
// 语法1
- (nonnull NSString *)test:(nonnull NSString *)name;
// 语法2
- (NSString * _Nonnull)test:(NSString * _Nonnull)name;
nullable、_Nullable、__nullable
nullable:提示可以为空。用法同上。
// 语法1
@property (nullable, nonatomic, copy) NSString *name;
// 语法2
@property (nonatomic, copy) NSString * __nullable name;
// 语法3
@property (nonatomic, copy) NSString * _Nullable name;
null_resettable
null_resettable:必须处理为空的情况,getter不能返回nil
,setter方法可以传入空。必须重写get方法或者setter方法,处理传递值为空的情况。
@property (null_resettable, nonatomic, copy) NSString *name;
null_unspecified、_Null_unspecified、__null_unspecified
null_unspecified:不确定是否为空。
// 语法1
@property (null_unspecified, nonatomic, copy) NSString *name;
// 语法2
@property (nonatomic, copy) NSString * _Null_unspecified name;
// 语法3
@property (nonatomic, copy) NSString * __null_unspecified name;
__kindof
__kindof:表示当前类或者子类。
// 语法1
@property (nonatomic, strong) NSMutableArray<__kindof NSString *> *names;
// 语法2
- (__kindof UITableViewCell *)cell;