Audited regions 审阅区域
现在我们的类已经用空特性修饰符来修饰了,由于我们的代码非常少,并且所有的属性都应该不为空,所以写起来还蛮简单的。这种情况下还有一个更有效率的方法,与其把所有元素都申明一边,不如告诉 Xcode 哪一些元素是可以为空的,那么剩下的那些就是不能为空的。
这就要用到 NS_ASSUME_NONNULL_BEGIN 和NS_ASSUME_NONNULL_END,这两个宏是成对使用的。当代码复杂的时候,比如用上了区块语法,就可以用到好几层,但是一般情况下,最外层还是用到 NS_ASSUME_NONNULL_BEGIN 和 NS_ASSUME_NONNULL_END,这样就能保证里面的元素都不为空。
那当你用着两个宏的时候,你就不用到处写 nonnull 了因为它就变成了元素的默认属性。
用上了这两个宏的 Person.h 文件是这样的:
NS_ASSUME_NONNULL_BEGIN
@interface Person : NSObject
@property NSString *name;
- (instancetype)initWithName:(NSString*)name;
- (NSString*)fetchGreetingForTime:(NSString*)time;
@end
NS_ASSUME_NONNULL_END
代码就比刚才要简洁多了。
当你想声明初始化器是可以返回空值的,就只要像下面这样子写就可以了:
- (nullable instancetype)initWithName:(NSString*)name;
有一点很重要,不要在你的代码里滥用这个功能,除非你真的确定里面的每个元素都不会返回空值。