ChrisRockC / MyWiki

点-线-面
0 stars 0 forks source link

__nonnull和__nullable #200

Open ChrisRockC opened 7 years ago

ChrisRockC commented 7 years ago

是Xcode 6.3的一个新特性,即nullability annotations。

我们都知道在swift中,可以使用!和?来表示一个对象是optional的还是non-optional,如view?和view!。

在Swift与Objective-C混编时,Swift编译器并不知道一个Objective-C对象到底是optional还是non-optional,因此这种情况下编译器会隐式地将Objective-C的对象当成是non-optional。

从字面上我们可以猜到,nullable表示对象可以是NULL或nil,而nonnull表示对象不应该为空。当我们不遵循这一规则时,编译器就会给出警告。

e.g @property (nonatomic, copy, nonnull) NSArray * items;

如果需要每个属性或每个方法都去指定nonnull和nullable,是一件非常繁琐的事。苹果为了减轻我们的工作量,专门提供了两个宏:NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END。