_Nullableなどの使い方とまとめ

1547 ワード

_Nullableなどの使い方_nullableと_nonnull.文字通り、_nullableは、オブジェクトがNULLまたはnilであることを示し、_nonnullは、オブジェクトが空であるべきではないことを示します.このルールに従わないと、コンパイラは警告します.Xcode 7では、第三者ライブラリとの潜在的な衝突を避けるために、アップルは_nonnull/__nullableを_に変更Nonnull/_Nullable.さらにアップルも下線のない書き方nonnull/nullableを支持し、現在3つの書き方が混乱している.
しかし、この3つの書き方は本質的に互いに通じ合っているが、置く位置が異なるだけで、例えば以下のように挙げられる.
メソッドは値修飾を返します.
- (nullable NSString*)method ;
- (NSString*  __nullable)method2 ;
- (NSString* _Nullable)method3 ;

属性の修飾を宣言するには:
@property(nonatomic, copy, nullable) NSString *aString;
@property(nonatomic, copy) NSString* __nullable aString;
@property(nonatomic, copy) NSString* _Nullable aString;

メソッドパラメータ修飾:
- (void)methodWithString:(nullable NSString *)aString;
- (void)methodWithString:(NSString  *_Nullable)aString;
- (void)methodWithString:(NSString *__nullable)aString;

一方、二重ポインタタイプオブジェクト、Blockの戻り値、Blockのパラメータなどについては、nonnull/nullableでは修飾できず、下線付きの__しか使えませんnonnull/__nullableまたは_Nonnull/_Nullable
- (void)methodWithError:(NSError *_Nullable *_Nullable)error;
- (void)methodWithError:(NSError * __nullable * __null_unspecified)error;
//  
- (void)methodWithBlock:(nullable id __nonnull(^)(id __nullable params))block;
- (void)methodWithBlock:(id __nonnull(^ __nullable)(id __nullable params))block;
- (void)methodWithBlock:(id _Nonnull (^ _Nullable)(id _Nullable params))block;

帰納:属性、メソッド戻り値、メソッドパラメータの修飾には、nonnull/nullableを使用します.C関数のパラメータ、Blockのパラメータ、Blockの戻り値の修飾について、Nonnull/_Nullable