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 . C'est une alternative à la condition if else lorsque celle-ci possède un trop grand nombre de conditions.

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.

Imaginons une variable jourDeLaSemaine qui représente le jour actuel. Nous voulons exécuter un code différent en fonction du jour où nous sommes :


let jourDeLaSemaine = "Lundi"

switch jourDeLaSemaine {
   case "Lundi":
       print("C'est le début de la semaine")
   case "Vendredi":
       print("C'est bientôt le week-end !")
   case "Samedi":
       print("C'est le week-end")
   case "Dimanche":
       print("C'est le week-end")
   default:
       print("C'est un jour ordinaire")
}

Dans cet exemple, si jourDeLaSemaine est "Lundi", le programme affiche "C'est le début de la semaine" Si c'est "Vendredi", il affiche "C'est bientôt le week-end !". Si c'est "Samedi" ou "Dimanche", il affiche "C'est le week-end". Pour tout autre jour, il affiche "C'est un jour ordinaire"

Notre variable jourDeLaSemaine ayant pour valeur "Lundi", cela affichera donc : "C'est le début de la semaine". Aucun autre cas ne sera étudié.

Pour une liste d'un ou deux cas : Préférez la condition If

L'expression dans une condition 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 énumérations (que nous aborderons dans quelques chapitres) et même des types personnalisés.

Les différents cas possibles dans la condition 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. Elle offre une syntaxe plus claire et plus concise pour traiter les différents cas d'une expression, ce qui améliore la lisibilité et la maintenance du code.

Condition à plusieurs cas

Il est possible de faire correspondre plusieurs valeurs pour un même cas. Il vous suffit simplement de séparer les valeurs par une virgule (,) :


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
}

Si nous reprenons notre exemple sur les jours de la semaine, nous pouvons maintenant écrire les cas "Samedi" et "Dimanche" sur la même ligne :


let jourDeLaSemaine = "Lundi"

switch jourDeLaSemaine {
   case "Lundi":
       print("C'est le début de la semaine")
   case "Vendredi":
       print("C'est bientôt le week-end !")
   case "Samedi", "Dimanche":
       print("C'est le week-end")
   default:
       print("C'est un jour ordinaire")
}

Condition switch et 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, on utilise la syntaxe suivante :


let point = (1, 1)

switch point {
  case (0, 0):
    print("Le point est sur l'origine")
  case (_, 0):
    print("Le point est sur l'axe X")
  case (0, _):
    print("Le point est sur l'axe Y")
  default:
    print("Le point est quelque part")
}

Dans l'exemple ci-dessus, la condition switch va vérifier les cas les uns après les autres. La constante point ne correspondant à aucun d'entre eux, c'est le cas default qui sera déclenché. Cela affichera donc "Le point est quelque part".

Liaisons de valeurs

Une liaison de valeurs dans une condition switch permet de nommer temporairement une valeur spécifique pour l'utiliser à l'intérieur du bloc de code correspondant à un cas particulier. Cela se fait avec le mot-clé let. Nous déclarons une constante qui ne sera utilisable que dans ce bloc de code. Prenons un exemple pour mieux comprendre :


let point = (2, 5)

switch point {
case (let x, 0):
    print("Le point est sur l'axe x à la hauteur \(x).")
case (0, let y):
    print("Le point est sur l'axe y à la position \(y).")
case let (x, y):
    print("Le point est à la position (\(x), \(y)).")
}

Dans l'exemple ci-dessus, le mot-clé let est utilisé pour lier temporairement les valeurs x et y dans chaque case du switch. Cela signifie que vous pouvez utiliser ces noms (x et y) à l'intérieur du code spécifique à chaque cas.

  1. Dans le premier cas, x est lié à la première valeur du tuple, donc x a pour valeur 2.
  2. Dans le deuxième cas, y est lié à la deuxième valeur du tuple, donc y a pour valeur 5.
  3. Dans le troisième cas, x et y sont liés aux deux valeurs du tuple (2, 5).

Un cas switch peut nommer les valeurs qui correspondent à des constantes ou des variables temporaires que vous pourrez 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.

Le mot-clé where dans une condition switch permet d'ajouter une condition supplémentaire pour restreindre davantage les cas correspondants. Cela signifie que le bloc de code associé à un cas particulier ne sera exécuté que si la condition spécifiée avec where est vraie. Nous avons déjà vu ce principe avec la condition if.


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
}

Prenons un exemple :


let point = (2, 5)

switch point {
case let (x, y) where x == y:
    print("Le point se trouve sur la diagonale.")
case let (x, y) where x == -y:
    print("Le point se trouve sur la diagonale opposée.")
case let (x, y):
    print("Le point se trouve à la position (\(x), \(y)).")
}

Dans cet exemple, chaque cas utilise let (x, y) pour lier temporairement les valeurs du tuple. x a donc pour valeur 2 et y a pour valeur 5. L'utilisation du mot-clé where permet d'ajouter une condition spécifique à chaque cas :

  1. Dans le premier cas, le code à l'intérieur sera exécuté seulement si x est égal à y.
  2. Dans le deuxième cas, le code à l'intérieur sera exécuté seulement si x est égal à l'opposé de y.
  3. Dans le troisième cas, le code à l'intérieur sera exécuté pour toutes les autres situations.

Le mot-clé where offre une flexibilité supplémentaire pour affiner les conditions dans une condition switch.

En utilisant une instruction where pour filtrer les cas correspondants, vous pouvez obtenir une logique de contrôle encore plus complexe et faire correspondre des cas spécifiques en fonction de critères déterminés.
  • La condition switch est une structure de contrôle de flux. Elle permet de vérifier la valeur d'une expression et d'exécuter du code en conséquence.
  • Il est possible de faire correspondre plusieurs valeurs pour un même cas en séparant les valeurs par une virgule.
  • Le cas default se place à la fin, en dernière place de la liste des cas.
  • Dès qu'un cas est comparé et que sa condition est vraie (true), les instructions après les deux points sont effectuées et le processus se termine. Aucun autre cas ne sera étudié.
  • Pour une liste d'un ou deux cas, préférez la condition If.