問題タブ [swift4.2]

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

swift - optional(nil) を評価するオプションのバインディングでの望ましくない動作

xCode をバージョン 10 (および Swift 4.2) に更新した後、オプションのバインディングで奇妙な動作が発生しました

コードは以下のとおりで、json ファイルの読み取りに関するものでT、ジェネリック型です (こちらString) 。

xCode 9.4.1 および Swift 4.1 では、次のログがあります。

それが私が望むものでvalues[langCode!]ありnil、キャストも返さnilれるため、elseブロックが実行されます。

Swift 4.2 を使用した xCode 10 には、次のログがあります。

ここではif let、values[langCode!] が「null」であってもブロックが実行されます。

1 つの違いは、Swift 4.2values[langCode!] as? Tでは でOptional(nil)あり、Swift 4.1values[langCode!] as? Tでは ですnil

バージョン 4.2の変更ログを確認しましたが、その動作を説明できるものは見当たりませんでした。また、JSONSerialization (json ファイルのシリアル化に使用) に変更が加えられていないことも確認しました。

Swift4.2 に切り替えたときに、そのようなことを経験した人もいますか? 誰か説明がありますか?回避策はありますか?

この種のコードでは、オプションのバインディングを使用する利点は何ですか? if (values[langCode!] != nil) {...オプションのバインディングの代わりに書くのは悪いでしょうか?

ありがとう