Nullability

自Xcode 6.3引入,最開始定義的是_nullable_nonnull,但怕和第三方庫沖突,從Xcode 7就改成了現(xiàn)在看到的_Nullable_Nonnull

適用范圍

OC對(duì)象和block對(duì)象

_Nullable & _Nonnull

其實(shí)就是寫到星號(hào)后面

@interface AAPLList : NSObject <NSCoding, NSCopying>
// ...
- (AAPLListItem * _Nullable)itemWithName:(NSString * _Nonnull)name;
@property (copy, readonly) NSArray * _Nonnull allItems;
// ...
@end

nullable & nonnull

位置大致是在大括號(hào)的開始

@property (copy, nullable) NSString *name;
@property (copy, readonly, nonnull) NSArray *allItems;

- (nullable AAPLListItem *)itemWithName:(nonnull NSString *)name;
- (NSInteger)indexOfItem:(nonnull AAPLListItem *)item;

Audited Regions

NS_ASSUME_NONNULL_BEGIN
@interface AAPLList : NSObject <NSCoding, NSCopying>
- (nullable AAPLListItem *)itemWithName:(NSString *)name;
- (NSInteger)indexOfItem:(AAPLListItem *)item;

@property (copy, nullable) NSString *name;
@property (copy, readonly) NSArray *allItems;
@end
NS_ASSUME_NONNULL_END

不適用Audited Regions的情況

  • typedef定義的類型
  • id *類型,需要手動(dòng)指定,比如a non-nullable pointer to a nullable object reference, _Nullable id * _Nonnull
  • NSError **,不受其他控制,總是nullable pointer to nullable NSError object

null_resettable

  • only used for property
  • setter allow to be set nil
  • but getter never produce nil because it have a default value
  • example, tintColor of UIView,it has a default value(system color); when set to nil, it reset to system color
@implementation Person
@synthesize greetings = _greetings;
- (void)setGreetings:(NSString *)greetings {
    if (greetings) {
        _greetings = greetings;
    } else {
        _greetings = @"hello world";
    }
}

- (NSString *)greetings {
    if (!_greetings) {
        _greetings = @"hello world";
    }
    return _greetings;
}
@end

Nullability的API在Swift中

  • no Nullability -> implicitly unwrapped optionals(String!)
  • nullable -> optional(String?)
  • nonnull -> non-optional(String)
  • null_resettable -> implicitly unwrapped optionals(String!)

參考

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容