nullable表示對象可以使NULL或nil;nonnull表示對象不應該為空怔昨。當我們不遵守這個規(guī)則時奖唯,編譯器就會報錯。
這個是蘋果在Xcode6.3引入的新特性:nullability annotations辟灰。
這個引入是為了解決什么問題呢?
我們知道在swift中可以使用 ! 和 ? 來表示一個對象是optional還是non-optional篡石,例如 string芥喇?和string!凰萨。但是在object-C中沒有這一區(qū)分继控。這樣就會有一個問題:當swift和object-C混合編譯時,swift編譯器并不知道這個object-C對象是optional還是non-optional(在默認情況下會把object-C對象當成non-optional)胖眷。
上面是針對單個屬性提供的方案武通,如果想批量的給一些對象設置屬性,應該如何添加呢?
蘋果提供了兩個宏定義:NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END珊搀。在這兩個宏之間的代碼冶忱,所有簡單指針對象都被假定為nonnull。因此我們只需要去指定那些nullable的指針:
#importNS_ASSUME_NONNULL_BEGIN
@interface NSArray (Add)
+ (NSArray *)arrayWithPlistData:(NSData *)plist;
...
@end
NS_ASSUME_NONNULL_END