web-dev-qa-db-fra.com

Swift if, instruction - plusieurs conditions séparées par des virgules?

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.

26
Marcus Leon

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.

Plus

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.

49
Luca Angeletti

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 est nil ou si une condition booléenne est évaluée à false, la condition de l'instruction entière if est considérée comme false. Les instructions if 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"
17
Joachim Isaksson