問題タブ [forced-unwrapping]
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.
ios - 使用する前に値をアンラップする必要がある理由
ブロックは以下のように定義されます
いくつかの時点で、次のようにしてブロックを呼び出しています
?
ブロックが存在するかどうかを確認したいので、使用しています。ただし、Xcode はfor
ループに対して不平を言います
ブロックの戻り値の型は、0 個または複数の項目を持つことができる配列であるため、その理由はわかりません。
xcodeが不平を言っている理由を知っている人はいますか?
swift - オブジェクトの初期化後に強制的なオプションのラップ解除を防止する
次のようなコードを使用するときに、強制的なアンラップ (Swift) を削除できるかどうか疑問に思っていました。
この場合、 currentProductRequest は 100% nil ではありません。ただし、これはオプションであり、上記のコンテキストでは、コンパイラはそれが nil ではないことを認識せず、強制的にアンラップする必要があります。SKProductsRequest を初期化しても nil が生成されないため、使用できません
私が知っている 1 つの方法は、currentProductRequest の宣言を var currentProductRequest : SKProductsRequest! のように暗黙的にアンラップすることです。ただし、コンパイラは currentProductRequest が nil になることはないと考えますが、そうではない可能性があります。
強制的なアンラップが問題を引き起こすことはないことはわかっていますが (この場合)、私には醜いように思えます。currentProductRequest が nil ではないことをコンパイラに知らせて、強制的なアンラップを削除する方法があるかどうかは誰にもわかりません。
swift - Force Unwrapping Optional と Implicitly Unwrapped Optional の違い
最初は、強制的なアンラップと暗黙的なアンラップについて非常に混乱していました。さて、以下の理解は私の独学から得られます。
暗黙的なアンラップに使用できるアクションはありませんが、暗黙的にアンラップされたオプションと呼ばれるものがあります。暗黙的にラップ解除された Optional と通常の Optional はどちらも Optional です。違いは、暗黙的にラップ解除された Optional にアクセスする場合、フードの下に有効な値があり、すぐに使用できることを自信を持って知ることができます。通常のオプションは、オプション変数の背後にある可能な値にアクセスするために、 if let
バインディングまたは強制アンラップ ( !
) アクションを必要とします。
まとめ:
強制アンラップは、通常の Optional に対して実行されるアクションです。
暗黙的にアンラップされた OptionalはOptionalであり、通常はクラスの初期化に使用され、使用時に感嘆符なしで値を渡します。
質問:
私は正しいですか?私の理解が正確でない場合は、訂正していただければ幸いです。
ありがとう
ios - Swift は、閉鎖時に値を nil としてアンラップしますが、コードの他の場所で正常にアンラップしますか?
だからここに私のコードがあります
したがって、この関数の最初の行で、highScore を呼び出して別のものに割り当てることができますが、クロージャー内で Xcode によって「self!」の使用が強制されます。そうすることで、オプションを事前に呼び出すと、それがnilではないことがわかりますが、どうにかしてオプションをアンラップします。私は本当に混乱しており、オプションを nil としてアンラップすることに関する基本的な質問がたくさんありますが、これに関連しているように見えるものはありません。
どうもありがとうございました!
編集:「弱い」を「所有されていない」に切り替えようとすると、同じ行でクラッシュし、ブレークポイントがないにもかかわらず「スレッド 3: EXC_BREAKPOINT」が発生します。このメッセージは別の画面では緑色で表示され、その行は強調表示されません
swift - ディクショナリ キー参照オプションの結果と迅速なアンラップの動機は何ですか?
私は迅速に調査を開始し、Dictionary of Array の参照とアンラップの要件に出くわしました。つまり、
「正方形」から9を取得するには、コーディングする必要があります
どこで!アンラップ演算子は本当に必要です。
さて、古典的に、辞書の添字が存在するかどうか不明な場合、典型的なプログラミングのアプローチは、添字を使用する前に辞書に添字が存在するかどうかをテストするか、使用している言語に応じて何らかのタイプの例外メカニズムを使用することです。 . 辞書の場合、コードをテストで囲むことなく、配列から値を取得するコード行をすばやく記述できることがわかります。これは、swift で作業するときの辞書参照のコーディングについての私の考え方を少し調整することを意味します。
エラーが発生し、どこを見ればよいかがわかれば、ドキュメントはこれらすべてを説明します。
辞書を使用してこの種の動作を迅速に行う動機は何だったのだろうかと思います。つまり、なぜ Swift は、例外メカニズムやキーの存在をテストする関数を持たずに、この方法を採用したのでしょうか?
この洞察によって、迅速な機能をよりうまく活用できるようになると信じています。
ありがとう!
swift - Apple のゲーム コード プロジェクト テンプレートでオプションをアンラップする
Xcode で新しいゲーム プロジェクトを作成するときに作成される Apple のコードの小さなサンプルでは、GameScene に、私が遭遇したことのないアンラップ パターンを使用するいくつかの関数があり、その要点がわかりません -
2 つの質問 - (1) これは危険なのか、(2) なぜより一般的なパターンを使用しないのか -
SOまたはGoogleでこれに関連するものは何も見つかりません...
swift - か、つかまえて無理矢理アンラッピング、頭悪い?
私は、実際には処理する必要がないオプションを処理していますdo, catch
が、処理できる可能性があると考えています。
SpriteKit に慣れていない方のために説明すると、playsound("correct") はサウンドを再生するアクションです。
関数を使用してそれらをたくさん作成し、文字列キーを使用して正しいものを見つける辞書に入れます。
for
...ここで、適切なサウンドを再生するアクションのキーとして機能するオーディオのファイル名から取得した文字列を使用して、これらの 100 ほどをディクショナリにパントするループを想像してください。
私が対処したい問題は、辞書を使用してアクションを返し、再生することは、オプションが戻ってくることを意味するということです。
アンラップが必要なもの:
おそらく私の恐れには根拠がありませんが、再生するサウンド ファイルのアクションの文字列を決定しようとしているシステムで発生する可能性のある障害に対処できるように、何とかこれをもっと優雅に行う必要があるとすぐに思いました... ええ、その文でごめんなさい。
私が最初に選んだのはこれでした:
これは不必要で長々としたものだと思ったので、私はdo
ただし、質問の上部に記載されている方法で使用すると、catch が呼び出されないことを示す警告が表示されます。
私は何を間違っているのですか、それともdo, catch
これに適していると考えるのは間違っていますか?
swift - DictionaryキーのSwift「if let ...」が失敗するとどうなりますか?
特定の基準に一致する既存の値がない場合に失敗するように意図的に設定された辞書があります。
それ以外の場合、このコマンドは機能しますが、1 回だけです。私はこれを正しく行っていることを願っています...失敗は何も起こらないことを意味します。else
緊急コードは必要ありません。
しかし、そうですか?