0

Swift で使用するための一連のまたは ObjC コードを準備していますが、これにはもちろん nullability アノテーションが必要です。これらの nullability アノテーションは、定義ではなく、宣言サイトにのみ必要であることが私の理解です。つまり、宣言がヘッダー ファイルにあり、定義が am/mm ファイルにある場合、それらを後者に追加する必要はありません。

例えば...

フー.h:

- (nullable Foo *)getFooWithKey:(NSString *_Nonnull)key;

ふー.mm:

- (Foo *)subtree:(NSString *)key
{
  // Some implementation here...
}

現在、ObjC の経験が豊富な同僚の何人かは、両方の場所に行かなければならないと言っています。つまり、mm ファイルは実際にはこれでなければなりません...

ふー.mm:

- (nullable Foo *)subtree:(NSString *_Nonnull)key
{
  // Some implementation here...
}

理由を聞くと「合っている」とのこと。ただし、m/mm ファイルからそれらを削除すると、Swift はヘッダーのみを見ているため、それらがなくても問題なく Swift にインポートされているように見えます。

そうは言っても、テストしていない両方の場所でそれらを必要とする考慮すべきことが他にあるかどうかはわかりません。そのため、それが決定的であるとは言えません。

読みやすさと生産性

通常、後者が実際には何もしなくても、読みやすくするのに役立つ場合は、「両方の場所に配置してください」と言うだけで十分です。ただし、私たちの特定のケースでは、何万もの APIを更新する可能性があるため、多くの余分な作業を排除することは、誰にとっても大きなメリットになります。さらに、コード MOD の作成も容易になります。

これに関するAppleのドキュメントで見つけた最も近いものは、これらの2つの抜粋です(強調は私のものです)...

ただし、一般的なケースでは、これらの注釈を記述するためのはるかに優れた方法があります。メソッド宣言内では、型が単純なオブジェクトまたはブロック ポインターである限り、下線のない形式nullableを開き括弧の直後に使用できます。nonnull

アンダースコアのないフォームはアンダースコアのフォームよりも優れていますが、ヘッダーのすべてのタイプに適用する必要があります。その作業を容易にし、ヘッダーをより明確にするために、監査済みリージョンを使用する必要があります。

決定的ではありませんが。最初は、「宣言に固有の」「より良い方法」としてそれを呼び出している可能性がありますが、一般に注釈がそこにのみ行くとは言いません。後者も、アンダースコアなしのものはヘッダーで使用できると言っていますが、一般的にnull可能性アノテーションはヘッダーにのみ表示できるとは言っていません。監査された領域のみが表示されます。

とはいえ、Appleがこれを明確にする場所を知っている人はいますか?それとも、定義/実装でそれらをスキップしてもよいことを私たちに知らせる何か他のものを共有できますか?

4

1 に答える 1