iOS9關鍵字的簡單實用

雲水天川-個人軟體開發者發表於2016-07-28

nullable表示可以為nil

nonnull表示不可以為nil

以上關鍵字僅僅修飾物件,不修飾基本資料型別。因此可以用在屬性、引數、返回值。

預設情況下不加nullable,setter和getter都可以為nil。

@property (nonatomic, strong, nullable) NSArray *array;
@property (nonatomic, strong) NSArray * __nullable array;
@property (nonatomic, strong) NSArray * _Nullable array;

- (nonnull NSString *)testString:(nonnull NSString *)string;
- (NSString * _Nonnull)testString:(NSString * _Nonnull)string;
- (NSString * __nonnull)testString:(NSString * __nonnull)string;

NS_ASSUME_NONNULL_BEGIN
NS_ASSUME_NONNULL_END


null_resettable

getter不可以為nil

setter可以為nil

如果使用null_resettable必須重寫getter或setter方法,其目的為處理值為空的情況。

@property (nonatomic, strong, null_resettable) UIView *testView;


泛型

使用泛型可以較為容易的獲取到其中的元素,並訪問特有的屬性和方法,一般用於集合,方法呼叫時有效果。

//屬性使用
@property (nonatomic, strong) NSMutableArray<NSString *> *testArrayM;
//在方法中使用
- (NSArray<NSString *> *)testStringArray:(NSArray<NSString *> *)stringArray;

在集合中規定物件的型別,通過集合取出的物件可以當做泛型來使用,並可以直接使用.語法



協變和逆變

__covariant 協變,用於資料強制轉換型別,子類轉變為父類

__contravariant 逆變,用於資料強制轉換型別,父類轉變為子類



__kindof

表示當前類或它的子類

__kindof放在型別前,表示修飾此型別

用於解決id型別無法在返回值中具體體現其型別問題

- (__kindof NSArray *)testStringArray:(NSArray *)stringArray;


相關文章