iOS9的幾個新關鍵字(nonnull、nullable、null_resettable、__null_unspecified)


1、nonnull:字面意思就能知道:不能為空(用來修飾屬性,或者方法的參數,方法的返回值)

代碼:

 1 //三種使用方式都可以
 2 @property (nonatomic, copy, nonnull) NSString *name;
 3 
 4 @property (nonatomic, copy) NSString * _Nonnull name;
 5 
 6 @property (nonatomic, copy) NSString * __nonnull name;
 7 
 8 //補充(不適用於assign屬性,因為它是專門用來修飾指針的)
 9 @property (nonatomic, assign) NSUInteger age;
10 
11 //補充(用下面宏包裹起來的屬性全部都具nonnull特征,當然,如果其中某個屬性你不希望有這個特征,也可以自己定義,比如加個nullable)
12 //在NS_ASSUME_NONNULL_BEGIN和NS_ASSUME_NONNULL_END之間,定義的所有對象屬性和方法默認都是nonnull

 

1 //也可以在定義方法的時候使用
2 //返回值和參數都不能為空
3 - (nonnull NSString *)test:(nonnull NSString *)name;
4 //同上
5 - (NSString * _Nonnull)test1:(NSString * _Nonnull)name;

 這樣,你在使用以上方法的時候會出現這種效果提示

同樣,使用屬性的時候:

 

2、nullable:表示可以為空(使用方法和上面幾乎一樣,但是沒有發現和上面類似的宏)

代碼(大概看一下,參考上面就行了):

1 //三種使用方式
2 // 方式一:
3 @property (nonatomic, copy, nullable) NSString *name;
4 // 方式二:
5 @property (nonatomic, copy) NSString *_Nullable name;
6 // 方式三:
7 @property (nonatomic, copy) NSString *__nullable name;

效果:

這樣,當在使用這個屬性的時候,Xcode的代碼提示會告訴你這個屬性是可以為空的,算是一種編程規范吧,減少程序員之間的交流。

 3、null_resettable: get:不能返回空, set可以為空(注意:如果使用null_resettable,必須 重寫get方法或者set方法,處理傳遞的值為空的情況)

 // 書寫方式:

 1 @property (nonatomic, copy, null_resettable) NSString *name; 

設置一下set或get方法

 1 - (void)setName:(NSString *)name
 2 {
 3     if (name == nil) {
 4         name = @"我叫暢敏";
 5     }
 6     _name = name;
 7 }
 8 - (NSString *)name
 9 {
10     if (_name == nil) {
11         _name = @"我叫暢敏";
12     }
13     return _name;
14 }

4、_Null_unspecified:不確定是否為空

使用方式只有這兩種:

1 @property (nonatomic, strong) NSString *_Null_unspecified name;

1 @property (nonatomic, strong) NSString *__null_unspecified name; 

 

總結:我理解這些東西主要就是為了提高開發規范,提示使用的人應該傳什么樣的值,如果違反了對規范值的要求,就會有警告;

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM