Ich packe zwei Werte aus einem Wörterbuch aus und bevor ich sie verwende, muss ich sie umwandeln und auf den richtigen Typ testen. Folgendes habe ich mir ausgedacht:
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
}
}
Aber ich würde die beiden gerne packen, wenn ich Anfragen in eine lassen würde. Damit es so etwas würde:
if let latitudeDouble = latitude as? Double, longitudeDouble = longitude as? Double {
// do stuff here
}
Diese Syntax funktioniert nicht, also habe ich mich gefragt, ob es einen schönen Weg gibt, das zu tun.
if-statement
swift
optional
suntoch
quelle
quelle
Antworten:
Update für Swift 3:
In Swift 3 funktioniert Folgendes:
Denken Sie daran, dass der Code im
if-let
Block nicht ausgeführt wird , wenn eine der versuchten optionalen Bindungen fehlschlägt .Hinweis: Die Klauseln müssen nicht alle 'let'-Klauseln sein. Sie können eine beliebige Reihe von Booleschen Prüfungen durch Kommas trennen.
Beispielsweise:
Swift 1.2:
Apple hat Ihre Frage möglicherweise gelesen, weil Ihr erhoffter Code in Swift 1.2 (heute in der Beta) ordnungsgemäß kompiliert wird:
Swift 1.1 und früher:
Hier sind die guten Nachrichten - Sie können dies voll und ganz tun. Eine switch-Anweisung für ein Tupel Ihrer beiden Werte kann mithilfe des Mustervergleichs beide
Double
gleichzeitig umwandeln:Update: Diese Version des Codes funktioniert jetzt ordnungsgemäß.
quelle
if let app = UIApplication.sharedApplication().delegate as? AppDelegate, let window = app.window {...}
. Ist die 2.let
auch optionale Bindung? Ich meine,app
ist nicht länger optional. richtig?app
ist nicht länger optional, aber seinewindow
Eigenschaft ist (sein Typ istUIWindow?
), also ist es das, was Sie auspacken.Mit Swift 3 können Sie eine optionale Verkettung, eine switch-Anweisung oder ein optionales Muster verwenden, um Ihr Problem zu lösen.
1. Verwenden
if let
(optionales Binden / optionales Verketten)Die Swift-Programmiersprache gibt Informationen zur optionalen Verkettung an:
Daher können Sie im einfachsten Fall das folgende Muster verwenden, um mehrere Abfragen in Ihrer optionalen Verkettungsoperation zu verwenden:
2. Verwenden von Tupeln und Wertebindung in einer switch-Anweisung
Als Alternative zu einer einfachen optionalen Verkettung kann die switch-Anweisung eine feinkörnige Lösung bieten, wenn sie mit Tupeln und Wertebindung verwendet wird:
3. Verwenden von Tupeln mit
if case
(optionales Muster)if case
( optionales Muster ) bietet eine bequeme Möglichkeit, die Werte der optionalen Aufzählung zu entpacken. Sie können es mit Tupeln verwenden, um eine optionale Verkettung mit mehreren Abfragen durchzuführen:quelle
Swift 3.0
quelle