iOS9新出的關(guān)鍵字我抠,用來(lái)修飾屬性逼蒙,或者方法的參數(shù)深滚,方法的返回值
好處:
- 迎合swift
- 提高我們開發(fā)人員開發(fā)規(guī)范锐秦,減少程序員之間的交流
nullable和nonnull
nullable
:表示可以為空,nonnull
為非空
只能修飾對(duì)象,不能修飾int等,因?yàn)閚il只能賦值給對(duì)象
書寫規(guī)范一樣赊锚,以nullable
為例:
- 方式一:
@property (nonatomic, strong, nullable) NSString *name;
- 方式二:
@property (nonatomic, strong) NSString *_Nullable name;
- 方式三:
@property (nonatomic, strong) NSString *__nullable name;
- 方式四:修飾方法
- (nonnull NSString *)name:(nonnull NSString *)str;
- (NSString *_Nonnull)name;
- 方式五:
在NS_ASSUME_NONNULL_BEGIN
和NS_ASSUME_NONNULL_END
之間定義的所有對(duì)象屬性和方法默認(rèn)都是nonnull
治筒。
NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, strong) NSString *name;
NS_ASSUME_NONNULL_END
null_resettable
// null_resettable:get不能返回空,set可以為空(比如控制器的view)
@property (nonatomic, copy, null_resettable) NSString *name;
null_resettable
必須重寫setter
或者getter
方法舷蒲,處理傳遞的值為空的情況(實(shí)際重寫不判斷為空警告也沒了)耸袜,不然會(huì)有警告。
null_unspecified
null_unspecified
不確定是否為空
@property (nonatomic, strong) NSString *_Null_unspecified name;
@property (nonatomic, strong, null_unspecified) NSString *name;
泛型
泛型:限制類型
泛型使用場(chǎng)景:
- 在集合(數(shù)組牲平、字典堤框、
NSSet
)中使用泛型比較常見。 - 當(dāng)聲明一個(gè)類纵柿。類里面的某些屬性的類型不確定蜈抓,這時(shí)候我們才使用泛型。
泛型好處:
- 提高開發(fā)規(guī)范昂儒,減少程序員之間交流
- 通過集合取出來(lái)對(duì)象沟使,直接當(dāng)做泛型對(duì)象使用,可以直接使用點(diǎn)語(yǔ)法
@property (nonatomic, strong) NSArray<NSString *> *nameArr;
// 后面使用時(shí)可以直接調(diào)出對(duì)應(yīng)的方法
self.nameArr[0].length;
// ObjectType可以自己指定名字
@interface Person<ObjectType> : NSObject
@property (nonatomic) ObjectType language;
- (ObjectType)language;
@end
Person<NSString *> *p = [Person new];
p.language = @"ss";
__covariant
(協(xié)變): 用于泛型數(shù)據(jù)強(qiáng)轉(zhuǎn)類型渊跋,可以向上強(qiáng)轉(zhuǎn)腊嗡,子類可以轉(zhuǎn)成父類着倾。
@interface Person<__covariant ObjectType> : NSObject
@property (nonatomic) ObjectType language;
- (ObjectType)language;
@end
__contravariant
(逆變): 用于泛型數(shù)據(jù)強(qiáng)轉(zhuǎn)類型,可以向下強(qiáng)轉(zhuǎn)燕少,父類可以轉(zhuǎn)成子類言缤。
@interface Person<__contravariant ObjectType> : NSObject
@end
__kindof
__kindof
表示當(dāng)前類或者它的子類
好處:
- 可以在編譯的時(shí)候兔辅,檢查真實(shí)類型
- 返回值會(huì)有提示修飾的當(dāng)前類
@property (nonatomic, strong) NSArray<__kindof NSString *> *nameArr;
- (__kindof NSString *)test;