Nullability

2019-07-23  本文已影响0人  songgeb

自Xcode 6.3引入,最开始定义的是_nullable_nonnull,但怕和第三方库冲突,从Xcode 7就改成了现在看到的_Nullable_Nonnull

适用范围

OC对象和block对象

_Nullable & _Nonnull

其实就是写到星号后面

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

nullable & nonnull

位置大致是在大括号的开始

@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的情况

null_resettable

@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中

参考

上一篇 下一篇

猜你喜欢

热点阅读