En regardant un Swift exemple :
if let sourceViewController = sender.sourceViewController as? MealViewController, meal = sourceViewController.meal {
...
}
Le doc déclare:
... le code affecte ce contrôleur de vue à la constante locale sourceViewController et vérifie si la propriété de repas sur sourceViewController est nulle.
Question: Swift vous permet-il d'avoir plusieurs conditions dans votre instruction if lorsqu'elle est séparée par des virgules (comme dans cet exemple avec la virgule après MealViewController
)?
Je n'ai pas vu cela dans les documents.
Oui quand tu écris
if let a = optA, let b = optB, let c = optC {
}
Swift exécute le corps de IF
uniquement si toutes les affectations sont correctement terminées.
Autre particularité de cette technique: les affectations se font en ordre.
Donc seulement si une valeur est correctement affectée à a
, Swift essaie d'assigner une valeur à b
. Et ainsi de suite.
Cela vous permet d'utiliser la variable/constante définie comme ceci
if let a = optA, let b = a.optB {
}
Dans ce cas (dans la deuxième affectation), nous utilisons en toute sécurité a
parce que nous savons que si ce code est exécuté, a
a été rempli avec une valeur valide.
Oui. Swift: Documentation: Guide de langue: Les bases: Liaison optionnelle dit:
Vous pouvez inclure autant de liaisons facultatives et de conditions booléennes dans une seule instruction
if
que nécessaire, séparées par des virgules. Si l'une des valeurs des liaisons facultatives estnil
ou si une condition booléenne est évaluée àfalse
, la condition de l'instruction entièreif
est considérée commefalse
. Les instructionsif
suivantes sont équivalentes:if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100 { print("\(firstNumber) < \(secondNumber) < 100") } // Prints "4 < 42 < 100" if let firstNumber = Int("4") { if let secondNumber = Int("42") { if firstNumber < secondNumber && secondNumber < 100 { print("\(firstNumber) < \(secondNumber) < 100") } } } // Prints "4 < 42 < 100"