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;

有一点很重要,不要在你的代码里滥用这个功能,除非你真的确定里面的每个元素都不会返回空值。

results matching ""

    No results matching ""