nonnull
iOS 9 で導入された理由を誰か詳しく説明できますか?
たとえば、NSArray
メソッド+ (instancetype)array;
は現在+ (instancetype nonnull)array;
これは Objective-C レベルの機能ですか? 既存のアプリにどのような影響がありますか?
nonnull
iOS 9 で導入された理由を誰か詳しく説明できますか?
たとえば、NSArray
メソッド+ (instancetype)array;
は現在+ (instancetype nonnull)array;
これは Objective-C レベルの機能ですか? 既存のアプリにどのような影響がありますか?
彼らは、型が null 非許容であるところはどこでも型であることを確認しましたnonnull
。
以前のNSMutableArray addObject
方法のように
- (void)addObject:(ObjectType)anObject
そして今、それはに変更されました
- (void)addObject:(ObjectType nonnull)anObject
nil
つまり、このメソッドにnull オブジェクト ( ) を渡すことはできません。同じように、あなたの場合
+ (instancetype nonnull) array
メソッドは決して戻りませんnil
。
Objective C と Swift の相互運用性を容易にするために、nullable と nonnull が導入されました。
Objective C では、オプションの参照とオプションでない参照の間に違いはありません。その場合、Swift コンパイラは、Objective C コードへの特定の参照がオプションかどうかを確認できません。
nullable アノテーションは、Swift のオプションと同じです。nonnull アノテーションは、Swift の non-optional と同じです。
経験則では、単純なポインター型はすべて非 null と見なされます (詳細については、Swift の公式ブログを参照してください) 。
また、この新しい注釈は、Objective C の観点からもコードの品質を向上させると言えます。パラメータとしてnilを渡すと、アプリがクラッシュするのではないかと思いますか?例えば:
id var;
NSMutableArray *a = [NSMutableArray new];
[a addObject:var];
この場合、コンパイラは何も言わず、アプリケーションは実行時にクラッシュします! この新しい注釈を使用すると、コンパイル時に警告が表示されます。この例がばかげていることは承知していますが、メソッドを呼び出す前にプロパティが nil かどうかを確認する必要があるかどうかは、ドキュメントを読まないとわからない場合があります。