Je déballe deux valeurs d'un dictionnaire et avant de les utiliser, je dois les convertir et tester le bon type. Voici ce que j'ai proposé:
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
}
}
Mais je voudrais regrouper les deux si vous laissez les requêtes en un seul. Pour que ce soit quelque chose comme ça:
if let latitudeDouble = latitude as? Double, longitudeDouble = longitude as? Double {
// do stuff here
}
Cette syntaxe ne fonctionne pas, alors je me demandais s'il y avait une belle façon de le faire.
if-statement
swift
optional
suntoch
la source
la source
Réponses:
Mise à jour pour Swift 3:
Ce qui suit fonctionnera dans Swift 3:
N'oubliez pas que si l'une des tentatives de liaison facultative échoue, le code à l'intérieur du
if-let
bloc ne sera pas exécuté.Remarque: les clauses ne doivent pas toutes être des clauses «let», vous pouvez avoir n'importe quelle série de vérifications booléennes séparées par des virgules.
Par exemple:
Swift 1.2:
Apple a peut-être lu votre question, car votre code espéré se compile correctement dans Swift 1.2 (en version bêta aujourd'hui):
Swift 1.1 et versions antérieures:
Voici la bonne nouvelle - vous pouvez tout à fait le faire. Une instruction switch sur un tuple de vos deux valeurs peut utiliser la correspondance de modèle pour les convertir toutes les deux en
Double
même temps:Mise à jour: cette version du code fonctionne désormais correctement.
la source
if let app = UIApplication.sharedApplication().delegate as? AppDelegate, let window = app.window {...}
. Le 2ème est-illet
également facultatif? Je veuxapp
dire, ce n'est plus une option. droite?app
n'est plus une option, mais sawindow
propriété est (son type estUIWindow?
), c'est donc ce que vous déballez.Avec Swift 3, vous pouvez utiliser un chaînage optionnel, une instruction switch ou un modèle optionnel pour résoudre votre problème.
1. Utilisation
if let
(reliure optionnelle / chaînage optionnel)Le langage de programmation Swift indique le chaînage facultatif:
Par conséquent, dans le cas le plus simple, vous pouvez utiliser le modèle suivant pour utiliser plusieurs requêtes dans votre opération de chaînage facultative:
2. Utilisation de tuples et de liaison de valeur dans une instruction switch
Comme alternative à un simple chaînage facultatif, l' instruction switch peut offrir une solution fine lorsqu'elle est utilisée avec des tuples et une liaison de valeur:
3. Utilisation de tuples avec
if case
(modèle facultatif)if case
( modèle facultatif ) fournit un moyen pratique de déballer les valeurs de l'énumération facultative. Vous pouvez l'utiliser avec des tuples afin d'effectuer un chaînage facultatif avec plusieurs requêtes:la source
Swift 3.0
la source