La condition switch en Swift est une structure de contrôle de flux qui permet de vérifier la valeur d'une expression et d'exécuter du code en conséquence. Il s'agit d'une alternative plus claire et plus concise à l'utilisation de plusieurs conditions if-else lorsqu'il y a plusieurs possibilités d'exécution.
La condition switch
Voici la syntaxe générale de la condition switch :
switch expression {
case value1:
// code à exécuter si expression est égale à value1
case value2:
// code à exécuter si expression est égale à value2
default:
// code à exécuter si expression ne correspond à aucune des valeurs définies précédemment
}
La variable considérée par l'instruction switch est comparée à différents cas désignés par le mot-clé case. Les cas sont étudiés les uns après les autres. Si la variable est égale au cas comparé ou que sa condition vaut true, les instructions après les deux points sont effectuées et le processus se termine. Aucun autre cas ne sera étudié, c'est la fin de l'instruction Switch.
Le cas default se place à la fin, en dernière place de la liste des cas. Il s'appliquera quel que soit le contenu de la variable si aucun autre cas le précédant n'est égal à cette variable.
Pour une liste d'un ou deux cas : Préférez la condition If
L'expression dans le switch peut être de n'importe quel type, y compris les types scalaires (tels que les entiers, les flottants, les booléens), les chaînes, les enumérations (que nous apprendrons dans quelques chapitres) et même des types personnalisés.
Les différents cas dans le switch doivent être uniques et exhaustifs, c'est-à-dire qu'ils doivent couvrir toutes les valeurs possibles de l'expression. Si aucun cas ne correspond à la valeur de l'expression, le code dans le bloc default sera exécuté. Ce bloc n'est pas obligatoire, mais il est généralement utilisé pour traiter les cas non pris en compte.
La condition switch est un outil puissant pour la gestion des flux de contrôle. Il offre une syntaxe plus claire et concise pour traiter les différents cas d'une expression, ce qui peut améliorer la lisibilité et la maintenance du code.
Condition à plusieurs cas
Il est possible de faire correspondre plusieurs valeurs à un même cas en utilisant la syntaxe case value1, value2, value3: :
switch expression {
case 1, 2, 3:
// code à exécuter si expression est égale à 1, 2 ou 3
case 4, 5, 6:
// code à exécuter si expression est égale à 4, 5 ou 6
default:
// code à exécuter si expression ne correspond à aucune des valeurs définies précédemment
}
Les plages de valeurs
Vous pouvez vérifier si une expression répond à une plage de valeurs en utilisant la syntaxe case value1...value2: :
switch expression {
case 1...10:
// code à exécuter si expression est compris entre 1 et 10
case 11...20:
// code à exécuter si expression est compris entre 11 et 20
default:
// code à exécuter si expression ne correspond à aucune des valeurs définies précédemment
}
Les tuples
Vous pouvez faire correspondre les tuples dans une condition switch. Cela peut être utile lorsque vous voulez tester plusieurs valeurs à la fois, telles que les coordonnées x et y d'un point dans un jeu. Pour faire correspondre un tuple, veuillez utiliser la syntaxe suivante :
let point = (1, 1)
switch point {
case (0, 0):
print("Point is at the origin")
case (_, 0):
print("Point is on the x-axis")
case (0, _):
print("Point is on the y-axis")
default:
print("Point is somewhere else")
}
Liaisons de valeurs
Il est conseiller d'utiliser une instruction where pour filtrer les cas correspondants. Cette instruction peut être utilisée pour vérifier si une valeur correspond à un certain critère avant de faire correspondre un cas.
let number = 5
switch number {
case let x where x % 2 == 0:
print("Number is even")
case let x where x % 2 != 0:
print("Number is odd")
default:
print("Number is not an integer")
}
Enfin, il est possible d'associer une valeur à un cas pour la stocker et l'utiliser plus tard dans le code en utilisant la syntaxe case value1 = value: :
switch expression {
case let x where x > 0:
// code à exécuter si expression est supérieure à 0
// x est maintenant disponible pour être utilisé dans le code
case let x where x < 0:
// code à exécuter si expression est inférieure à 0
// x est maintenant disponible pour être utilisé dans le code
default:
// code à exécuter si expression ne correspond à aucune des valeurs définies précédemment
}
Un cas switch peut nommer la ou les valeurs qui correspondent à des constantes ou des variables temporaires, à utiliser dans le corps du cas. En utilisant ces différentes techniques, vous pouvez implémenter des conditions complexes et les organiser de manière claire et concise.