2016-09-08 13 views
2

ヘッダファイルの一部にヌルタビリティアノテーションを追加しようとしていましたが、そのブロックがヌルではないと思っていましたが、その後ほとんどすべてのメソッドがNULLを追加する必要がある注釈。以下、このためのNS_ASSUME_NONNULL_ENDの後のヌル性の注釈警告

例コード:

NS_ASSUME_NONNULL_BEGIN 
- (void)testMethodWithParameter:(NSString *)par otherParameter:(NSString *)otherPar; 
NS_ASSUME_NONNULL_END 

- (void)methodThatShouldntNeedAnnotationWithText:(NSString *)txt; 
//Warning: Pointer is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified) 

私が間違ってこれらのマクロを理解するだろうか?私はそれがBEGIN/ENDブロック内で監査されると言われていた部分を含んでいると思ったが、外部はすべて依然として_Null_unspecified

これは意図したとおりに動作しているのか、私の考え方は?

NS_ASSUME_NONNULL_BEGIN 
- (void)testMethodWithParameter:(NSString *)par otherParameter:(NSString *)otherPar; 
NS_ASSUME_NONNULL_END 

がに変換されます:だから

- (void)testMethodWithParameter:(nonnull NSString *)par otherParameter:(nonnull NSString *)otherPar; 

NS_ASSUME_NONNULL_BEGINの不在は、そのすべてのパラメータを意味するものではありません

+3

私は知りません、私もそれを観察しました。インターフェイスファイルにnull可否アノテーションがあるとすぐに、そのファイルにnull許容*を指定する必要があります。 –

+0

少なくとも、NS_ASSUME_NONNULL_ENDはインターフェイス内で何もしないようです。 Apple Swiftブログのサンプルコードは、 '@ interface'の前に' BEGIN'を、 '@end'の後に' END'を表示しています。たぶんそれはその一部のためのインターフェイスの中で使用されることを意図していないかもしれません。 – NickCE

答えて

1

NS_ASSUME_NONNULL_BEGINしたがって、任意のパラメータがnull以外の変数とみなすことができるようになりnullableでもunspecifiedでもあると仮定しても、定義する必要があります。だから、あなたはテキストがnullable可能性があり、このようなパラメータにキーワードを追加したい場合は、あなたが望むものを指定する必要があり、他の方法のために:それは意図的であるかどう

- (void)methodThatShouldntNeedAnnotationWithText:(nullable NSString *)txt; 
+0

そして、 'testMethodWithParameter'のために私が望むのですが、' NS_ASSUME_NONNULL_END'マクロの後に 'methodThatShouldntNeedAnnotationWithText'についての警告が表示されるのはなぜですか? – NickCE

+0

私が言ったことは、あなたのパラメータに 'nullability'を指定する必要があります。これは' MACRO'を使うか、すべてのパラメータで指定することで実現できます。 – Fantini

+1

'MACRO'は、' ..._BEGIN'と '..._END'の間のメソッドシグネチャにのみ影響を与えます。コンパイラがあなたに言っているのは' methodThatShouldnt ... 'に' nullability specifiers'がありません – Fantini

関連する問題