問題タブ [optional-binding]

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 に答える
74 参照

xcode - オプションのバインドでオプションの int "possibleNumber" を使用できません

私はSwiftが初めてで、オプションのバインディングの概念を学ぼうとしています。私は次のコードを思いつきました:

Xcode プレイグラウンド出力エラー メッセージ:

ただし、「!」を追加すると、に if let actualNumber = Int(possibleNumber!){

Xcode は別のエラー メッセージを表示します。

なぜこうなった?

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

swift - swift: SCNNode 配列の辞書に安全にアクセスする

私は Swift に比較的慣れておらず、オプションの安全面をまだ習得していません。

タイプの辞書があり[String: [SCNNode]]ます。与えられた分子は、 の要素として複数のコンポーネントを持ちます[SCNNode]。その分子について、このコンポーネントの配列を取得し、各要素をローカルSCNNodeに割り当てて、表示、操作、およびアニメーション化します。

オプションでこれをバインドしようとすると、コンパイラはこれに満足しているようです。

? については不明です。これについての私の読書は、nil があっても気にしないような方法でアンラップしていることを示唆しています。しかし、このオプションのバインディングは、上記の強制的なアンラップよりも優れていますか? それとも、これは「オプションの連鎖」ですか?代わりに、割り当て時にチェックを行う必要がありcomponentsますか? ここでも安全性について心配する必要がありますか?私が行った唯一の「アップスチーム」テストは、に割り当てる前に辞書アーカイブが存在することmoleculeDictionaryです。

私はこれらの課題を何百も持っているので、これを正しくしたいと思います。これを処理する最善の方法に関する提案は大歓迎です!

ありがとう、バーン

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

swift - コンパイラが「未解決の識別子」と言った nil オブジェクトを出力する

次のコードを試してみましたが、エラーが発生しました。

エラー:

オブジェクトactualNumberの背後で何が起こっているのでしょうか? オプションのバインディングの最初の部分で宣言しました:「if let actualNumber: Int .....」では、なぜ「未解決」なのですか? うーん...「未解決」とは正確には何ですか?

nil を印刷するのはどういうわけか間違っていると思いますが、なぜ間違っているのでしょうか? 知らない。誰かがこれをもう少し説明できますか?ところで、actualNumberの中に本当にnilがありますか?もしそうなら、どうすればそれを「見る」ことができますか?

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

swift - オプションのバインディング、ここで「バインディング」という言葉は正確には何を意味しますか?

オプションのバインドは、オプションに値が含まれているかどうかを調べ、含まれている場合はその値を一時的な定数または変数として使用できるようにする方法です。

質問バインディングとは、有効な値を一時的な定数/変数に代入するアクションを意味しますか? つまり、これらの 2 つのことを「結合」しますか?

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

swift - 暗黙的にラップ解除されたオプションを使用するが、nil とオプションのバインディングをテストすることには技術的な欠点がありますか?

さて、Swiftでオプションを使用する通常の方法は、オプションのバインディングを介してそれらをアンラップすることです...

しかし、暗黙的にアンラップされたオプションを使用する次の方法も見ました。これは、追加の変数を必要としないだけでなく、「読み」やすく、英語に似ているため、個人的にはきれいに見えると思います (つまり、「これがnil ではありません...') そして可読性は Swift の核となる信条の 1 つです (特に今後の Swift 3.0 では)。

ただし、後者に関しては、Swift の「純粋主義者」はこれを「コードの匂い」と呼び、「悪い、悪い、悪い!!」と主張します...しかし、彼らは理由を説明しません! では、なぜそんなに悪いのですか?

注: はい、暗黙的にラップ解除されたオプションでは使用できない Optional チェーンやその他の機能については知っています。それらはすべて非常に優れた機能ですが、暗黙的にラップ解除されたオプションを nil に対してテストすることの技術的な欠点について具体的に尋ねています。対オプションのバインディング。

私が期待しているのは、一方が他方よりも優れている定量化可能な技術的な理由です (つまり、コンパイラの最適化、より優れた安全性チェック、パフォーマンスなど)。それをするために!' それが理にかなっていることを願っています。

アップデート

私は実際に、ラップされていない変数を保持するために新しい変数を作成する必要があるという私の懸念の 1 つ (少なくとも表面的な方法で) に対処する方法を見つけました。ここでの秘訣は、ラップされていない変数は実際にはオプション自体とは異なるスコープにあるため、まったく同じ名前を使用できることです。

さらに、大括弧自体の内側には、stringA という名前の変数を持つことができるさらに別のスコープがあります。これは、3 つの 'stringA' 変数を使用できるようになったことを意味します (しかし、そうすべきというわけではありません! )...

  1. オプションの
  2. アンラップされたオプション
  3. 括弧内の新しいローカル変数

これを示すこのクレイジーなコードは次のとおりです...

繰り返しますが、私はこれを容認しません!! 他の人が有益な観点から興味深いと思うコードをいくつか示しているだけです。確かにやった!

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

swift - Swift 2.2 のオプションのバインディング バグ?

上記のコードでは、以下のエラーが発生します。

オプションの型「文字列?」の値 開封されていません。「!」を使用するつもりでしたか? また '?'?

このスクリーン ショットでわかるように。

ここに画像の説明を入力

sender.currentTitleはオプションです。

これは、Apple の「 The Swift Programming Language (Swift 2.2) 」からの抜粋で、そのすぐ下にサンプル コードがあります。

オプションの値が の場合nil、条件はfalseであり、中括弧内のコードはスキップされます。それ以外の場合、オプションの値はアンラップされ、 の後に定数に割り当てられます。letこれにより、アンラップされた値 がコード ブロック内で使用できるようになります。

その抜粋のサンプル コードを次に示します。

これらの理由から、何かが足りない、バグにぶつかっていると思います。

Playground でも同様のことを試しましたが、同様のエラーは発生しませんでした。

ここに画像の説明を入力

これが私の Swift バージョンです。

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

java - 子モジュールのフェイルセーフ インジェクター。Google Guice のオプションのバインディング

ChildPlugin という子モジュールがあり、次のようにメイン モジュールからクラスを挿入します。

問題は、メイン モジュールがバインドされているかどうかがわからず、バインドExampleClassされていない場合、インジェクターの作成時に Guice が例外をスローすることです。私がやりたいことは、Guice を渡すことnull、またはOptional.emptyExampleClass がバインドされていない場合です。

メイン モジュールにアクセスできないため、バインダーを に変更できませんExampleClass。方法OptionalBinderを試し@NullableてみOptional<ExampleClass>ましChildPlugin.setDemoたが、うまくいきませんでした。

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

swift - 一貫性のないキャストはありますか? オプションのバインディング中にSwiftのプロトコルに

プロトコルへのキャストを使用した Swift Optional Binding で問題が発生しています。正常に動作するプレイグラウンドに次のコードがあります。

渡された情報の一部としてwatchKitでまったく同じプロトコルと構造体を使用してawake(withContext context: Any?)いますが、キャストによるオプションのバインディングはそこで失敗しています。

なぜこれが遊び場では機能するのに、watchKit クラスメソッドでは機能しないのかを誰かが教えてくれたら、本当にありがたいです。

本当に明白な何かが欠けているように感じます。