問題タブ [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.
swift - Swift言語で感嘆符は何を意味しますか?
Swift プログラミング言語ガイドには、次の例があります。
次に、アパートを人に割り当てるときに、感嘆符を使用して「インスタンスをアンラップ」します。
「インスタンスをアンラップする」とはどういう意味ですか? なぜそれが必要なのですか?次のことを行うのとどう違うのですか?
私はSwift言語に非常に慣れていません。基本を押さえようとしているだけです。
更新:
私が見逃していたパズルの大きなピース(回答には直接記載されていません-少なくともこれを書いている時点ではありません)は、次のことを行うときです:
john
私が最初に考えたように、それは「型Person
であり、nilかもしれない」という意味ではありません。Person
とPerson?
は完全に別のタイプだと単純に誤解していました。それを理解すると、他のすべて?
、!
狂気、および以下の素晴らしい答えがより理にかなっています.
swift - AnyObjectの戻り値はどうですか!AnyObject とは異なります
Swift の下の Cocoa フレームワークのNSMetadataItem
クラスには、次の関数が含まれています。
func valueForAttribute(key: String!) -> AnyObject!
強制的なアンラップとオプションのチェーンの違い (および詳細) をまだ学んでいます。上記の関数では、これは次のことを意味しますか?
key
パラメータには値が必要です。戻り値は値を持つことが保証されていますか?
私の主な関心事は、戻り値に続く感嘆符です-戻り値を割り当てたら:
ブロックを検査するときにブロックを含める必要がありif let
ますか?それとも、安全に検査できる値を持つことが保証されていますか?
swift - 強制ダウンキャストをオプションとして扱うと、「nil」が生成されることはありません
私はSwiftで遊んでいて、辞書に挿入するオブジェクトをダウンキャストすると、奇妙な警告が表示されることを発見しました: Treating a forced downcast to 'String' as optional will never produce 'nil'
. に置き換えるas
とas?
、警告が消えます。
Appleのドキュメントには次のように書かれています
ダウンキャストは失敗する可能性があるため、型キャスト演算子には 2 つの異なる形式があります。オプションの形式 は
as?
、ダウンキャストしようとしている型のオプションの値を返します。強制形式 はas
、ダウンキャストを試み、結果を単一の複合アクションとして強制的にアンラップします。
as?
ここで代わりに使用するのas
が正しい理由は不明です。いくつかのテストでは、test() を String ではなく Int を返すように変更すると、引き続きas
. using に切り替えるとas?
、コードは通常どおり実行を継続し、そのステートメントをスキップします (dict は空のままになります)。ただし、なぜこれが好ましいのかはわかりません。私の意見では、プログラムがエラーで終了し、キャストが失敗したことを知らせてから、エラーのあるステートメントを単に無視して実行し続けることをお勧めします。
ドキュメントによると、「ダウンキャストが常に成功することが確実な場合にのみ」強制形式を使用する必要があります。test()
この場合、文字列のみを返すことができることがわかっているため、ダウンキャストは常に成功すると確信しているため、これはダウンキャストの強制形式に最適な状況であると想定します。では、なぜコンパイラは警告を出すのでしょうか?
coding-style - Swift のアーリー リターン / ゴールデン パス
私は、Objective-C でアーリー リターン/ゴールデン パスを使用してコードを記述することに慣れています。!
私は Swift でこのアプローチを試してみましたが、オプションが関係している場合、強制的なアンラップ演算子 ( ) を使用することを犠牲にして早期復帰が行われることに気付きました。
ディレクトリのサイズを計算する方法を取ります。まず、ゴールデン パス バージョン:
変数と変数!
の両方に演算子を使用していることに注意してください。contents
attributes
!
演算子を使いすぎると、オプションの目的とそれらがもたらす型の安全性が損なわれると思います。これは、強制的なアンラップを回避するために、上記のメソッドを Swift でコーディングする必要があると私が感じる方法です。
ただし、使用if let
することで早戻しができなくなります。アーリー リターンを使用しないメソッドと使用するメソッドがある場合、コーディング スタイルが混在するプロジェクトになってしまいます。
私の質問は、オプショナルが関係している場合に、強制的なアンラップに頼らずにゴールデン パス スタイルでコーディングする方法はありますか?
javascript - jqueryを使用してビデオタグをアンラップする
私はこれを持っています:
このビデオタグをアンラップする必要があるため、次のことを試しました。
コンソール ウィンドウの結果は次のとおりです。
どんな手掛かり?
どうも!
ios - Swift Optionals - アンラップのさまざまな方法
すぐに始めます:
次の違いは何ですか:
と
どちらもプレイグラウンドで同じ結果を出力します。
暗黙のアンラップが安全とは見なされないことはわかっていますが (ほとんどの場合)、アンラップする前に値が nil かどうかを確認していますか?
両方の方法が有効であり、どちらかがより良い選択と見なされるさまざまなシナリオがありますか?
ios - このように [( String, [ProtocolType] )] に (String, [ProtocolConformer]) タプルを挿入できないのはなぜですか?
問題のシナリオを遊び場で要約しました。
ここで強制アンラップが受け入れられないのはなぜですか?
Xcode 6.1.1
ios - ディクショナリからの任意の型 Any のラップ解除
私は以前にこれに似た質問をしましたが、答えがうまくいかないようです。
Settings という辞書があります。
var settings = 文字列: 任意
これは、テキスト ファイルを読み取ることによって入力されます - すべて正常に動作します
実行するprintln(settings)
と、必要に応じて塗りつぶされた辞書が返されます。
[monsterRate: 1.0、monsterMinSpeed: 10.0、weaponPickupRate: 10.0、weaponPickupAmount: 50.0、goldPerMonster: 10.0、totalMonsters: 10.0、LevelNum: 1.0、monsterMaxSpeed: 15.0]
実行するとOptional("10.0")println(settings["monsterMinSpeed"])
が返されます
ただし、変数を辞書が保持する値に設定しようとすると、機能しません。
辞書には値がありますが、提供しているキーが存在しないかのように常に 0.0 を使用します - nil を返すため、変数を 0.0 に設定します
誰か助けてくれませんか?