問題タブ [objective-c-nullability]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
4528 参照

objective-c - Objective-C の Nullability: 定数文字列の修飾

NSNotification私は、名前のようなものに定数文字列を宣言して使用するというかなり良い習慣を身につけました。私はそれらを次のように宣言します:

nonnullXcode 6.3 と Swift 1.2 の導入に伴い、新しい、nullable、およびnull_unspecified修飾子を使用して、Swift と相互運用する Objective-C クラスに戻って監査しています。

外部から見える静的文字列も含むヘッダーに修飾子を追加すると、次の警告が表示されます。

警告: ポインターに null 許容型指定子 (__nonnull または __nullable) がありません

うーん。それは紛らわしい/興味深いです。誰かがこのメッセージの背後にある理由を説明できますか? Swift で使用ABCAwesomeThingHappenedNotificationする場合、オプションの文字列または暗黙的にラップされていない文字列であることを示唆することはありません。

0 投票する
3 に答える
4433 参照

objective-c - コンパイラにデフォルトで「nullable」を想定させる方法

nullableXcode 6.3 以降、Objective-C の型はまたはnonnullでマークできます。これに関する Apple のブログ投稿はこちらです。

問題は、どちらも指定されていない場合、コンパイラが Objective-C コードを Swift に暗黙的にアンラップNSView!されたものとしてインポートすることです。そのため、オブジェクトが実際nil の場合、Swift からアクセスするとクラッシュします。これにより、コンパイラ エラーは発生しません。

これは失敗する可能性が非常に高いため、 、または audited region macrosを介して指定された場合を除き、デフォルトで Objective-C のすべてを としてコンパイラに想定させたいと思いnullableます。それはどのように達成できますか?nonnullNS_ASSUME_NONNULL_BEGIN / END

0 投票する
1 に答える
171 参照

ios - PF_NULLABLE 解析フレームワークを理解するのが難しく、メッセージを PFUser に送信する

Xcode 6.3 パースを使用。フレームワークでエラーが発生していたので、更新された Parse フレームワークをダウンロードすると、動作が開始されました。

さて、この方法logInWithUsernameが何であるかを理解しようとしている新しいことがあります。以前はかなりシンプルでした。コードを書いている間、より多くの null が表示されます。そして、ある時点で、主にポインターへのポインター(つまりNSError)で混乱します。

定義にジャンプすると、それはまったく別の話です。構文は次のように明確に見えます。

このフレームワークの構成またはセットアップ側で何か不足していますか?

0 投票する
2 に答える
305 参照

swift - Null可能性が利用可能になる前のSwiftの Implicitly Unwrapped Optional の使用

nullability に関する Apple のブログでは、次のように言及されています。

「... Swift では、オプションの参照と非オプションの参照の間に強い区別があります。たとえば、NSView と NSView? のように、Objective-C はこれら 2 つのタイプの両方を NSView * として表します。Swift コンパイラは、特定の NSView * がオプションであるかどうかに関係なく、型は暗黙的にアンラップされたオプションの NSView として Swift に取り込まれます!"

これは、Objective-C メソッドが Swift で暗黙的にラップされていないオプションを返すと宣言したときに、実際にクラッシュする可能性があることを意味しますか (暗黙的にラップされていないオプションで宣言されたメソッドの一部が nil を返す可能性があるため)。それとも、Apple は絶対に nil を返さない Objective-C メソッドだけが、暗黙的にラップ解除されたオプションとして宣言されるようにしますか?

0 投票する
4 に答える
44980 参照

objective-c - Objective-Cのnullable、__nullable、_Nullableの違い

Xcode 6.3 では、 Objective-Cの API の意図をより適切に表現するために (そしてもちろん、より良い Swift サポートを確実にするために)新しい注釈が導入されました。これらの注釈は、もちろんnonnullnullableおよび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 アノテーションが用意されました。

  • nonnullnullablenull_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

しかし、基本的に同じことを行うアノテーションがこれほど多くある理由については、いまだに混乱しています。

だから私の質問は:

これらの注釈の正確な違いは何ですか?それらを正しく配置する方法とその理由は?

0 投票する
6 に答える
54233 参照

ios - ポインターに null 許容型指定子がありません

Xcode 7 GM では、次の警告が表示され始めました。

ポインターに null 許容型指定子 (_Nonnull、_Nullable、または _Null_unspecified) がありません

次の関数宣言で (NSUserDefaults 拡張)

スクリーンショット

この警告が表示される理由と修正方法を教えてください。

0 投票する
2 に答える
1059 参照

objective-c - 互換性のない型 _Nonnull から _Nullable への代入を警告しますが、修飾子を変更しても何も起こりません

次のメソッドを定義するプロトコルがあります。

それを実装するクラスには次のプロパティがあります。

メソッドの実装は次のようになります。

これは正確な警告です:

互換性のない型 '__strong id _Nonnull' から 'id _Nullable' に割り当てています

nullability を変更しても何も起こりません。

編集: .m ファイルに次のクラス拡張子があります。