Xcode 6.3 では、 Objective-Cの API の意図をより適切に表現するために (そしてもちろん、より良い Swift サポートを確実にするために)新しい注釈が導入されました。これらの注釈は、もちろんnonnull、nullableおよびnull_unspecified.
しかし、Xcode 7 では、次のような多くの警告が表示されます。
ポインターに null 許容型指定子 (_Nonnull、_Nullable、または _Null_unspecified) がありません。
それに加えて、Apple は別のタイプの null 可能性指定子を使用して、C コードをマークします ( source )。
CFArrayRef __nonnull CFArrayCreate(
CFAllocatorRef __nullable allocator, const void * __nonnull * __nullable values, CFIndex numValues, const CFArrayCallBacks * __nullable callBacks);
要約すると、これらの 3 つの異なる nullability アノテーションが用意されました。
nonnull、nullable、null_unspecified_Nonnull、_Nullable、_Null_unspecified__nonnull、__nullable、__null_unspecified
注釈を使用する理由と場所はわかっていますが、どのタイプの注釈を使用する必要があるか、どこで、なぜ使用する必要があるかについて少し混乱しています。これは私が集めることができるものです:
- プロパティには、、、を使用する必要が
nonnullありnullableますnull_unspecified。 - メソッドのパラメーターには、、、を使用する必要が
nonnullありnullableますnull_unspecified。 - C メソッドの場合、 , , を使用する必要が
__nonnullあり__nullableます__null_unspecified。 - ダブルポインターなどの他のケースでは、、、を使用する必要が
_Nonnullあり_Nullableます_Null_unspecified。
しかし、基本的に同じことを行うアノテーションがこれほど多くある理由については、いまだに混乱しています。
だから私の質問は:
これらの注釈の正確な違いは何ですか?それらを正しく配置する方法とその理由は?
