[解決済み] Swiftでif文の中で複数のlet-asを使用する
2022-04-27 05:37:21
質問
辞書から2つの値をアンラップしていますが、それらを使用する前に、それらをキャストして正しい型かどうかをテストする必要があります。これは、私が思いついたものです。
var latitude : AnyObject! = imageDictionary["latitude"]
var longitude : AnyObject! = imageDictionary["longitude"]
if let latitudeDouble = latitude as? Double {
if let longitudeDouble = longitude as? Double {
// do stuff here
}
}
しかし、私は2つのif letクエリを1つにまとめたいのです。そうすれば、このようになります。
if let latitudeDouble = latitude as? Double, longitudeDouble = longitude as? Double {
// do stuff here
}
その構文ではうまくいかないので、美しい方法がないかと考えていました。
どのように解決するのですか?
Swift 3に対応したアップデートを行いました。
以下は、Swift 3で動作します。
if let latitudeDouble = latitude as? Double, let longitudeDouble = longitude as? Double {
// latitudeDouble and longitudeDouble are non-optional in here
}
オプショナルバインディングの試みが失敗した場合、その中のコードも失敗することを覚えておいてください。
if-let
ブロックは実行されません。
注意:節はすべてlet節である必要はなく、カンマで区切られたブーリアン・チェックをいくつでも並べることができる。
例えば
if let latitudeDouble = latitude as? Double, importantThing == true {
// latitudeDouble is non-optional in here and importantThing is true
}
Swift 1.2です。
Appleはあなたの質問を読んだのかもしれません。あなたの希望するコードはSwift 1.2(本日ベータ版)で適切にコンパイルされるからです。
if let latitudeDouble = latitude as? Double, longitudeDouble = longitude as? Double {
// do stuff here
}
Swift 1.1以前。
でも、これなら大丈夫。2つの値のタプルに対するswitch文は、パターンマッチングを使って2つの値をそれぞれ
Double
を同時に実行します。
var latitude: Any! = imageDictionary["latitude"]
var longitude: Any! = imageDictionary["longitude"]
switch (latitude, longitude) {
case let (lat as Double, long as Double):
println("lat: \(lat), long: \(long)")
default:
println("Couldn't understand latitude or longitude as Double")
}
更新しました。 このバージョンのコードは正しく動作するようになりました。
関連
-
[解決済み] OCamlにおける複数のif文の実装
-
[解決済み] Swift言語におけるエクスクラメーションマークの意味とは?
-
[解決済み] 使用しているSwiftのバージョンを確認するにはどうすればよいですか?
-
[解決済み] SwiftのIF LETはどのように評価されるのですか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Pythonのif文における&&(論理和)に相当する機能
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] AngularJS テンプレートにおける if else ステートメント
-
[解決済み] Swiftの@selector()?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] gitlabciでif-else条件を使用する方法
-
[解決済み] 代入文の「others=>'0'」はどういう意味ですか?
-
[解決済み] 中括弧のないif文を使用するのは悪い習慣ですか?[クローズド]
-
[解決済み] SwiftのIF LETはどのように評価されるのですか?
-
[解決済み] SwiftのIF LETはどのように評価されるのですか?
-
[解決済み] cmake if else with option
-
[解決済み] GoにはPythonのような "if x in "の構成がありますか?
-
[解決済み】「if」文が多すぎる?
-
[解決済み】Swiftでif文に範囲演算子を使うことはできますか?
-
[解決済み] Swiftでif文の中で複数のlet-asを使用する