Swift fournit plusieurs instructions de contrôle de flux. Cela incluent la boucle while, pour effectuer une tâche plusieurs fois, les instructions if, guard et switch pour exécuter différentes branche de code en fonction de certaines conditions et des instructions tel que break et continue pour transférer le flux d'exécution vers un autre point de votre code.

Swift fournit également la boucle for-in pour faciliter l'itération des tableaux, des dictionnaires, des plages, des chaines et d'autres séquences.

Par exemple, on peut parcourir un dictionnaire pour accéder à ses paires clé-valeur. Chaque élément du dictionnaire est renvoyé sous forme de tuple lorsque le dictionnaire est itéré, ou on peut décomposer les membres du tuple en constantes nommées explicitement à utiliser dans le corps de la boucle.

Itération d'un tableau ou array :


let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names {
    print("Bonjour, \(name)!")
}
// Bonjour, Anna!
// Bonjour, Alex!
// Bonjour, Brian!
// Bonjour, Jack!

Itération d'un dictionnaire :

Vous pouvez également parcourir un dictionnaire pour accéder à ses paires clé-valeur. Chaque élément du dictionnaire est renvoyé sous la forme d'un tuple lorsque le dictionnaire est itéré, et vous pouvez décomposer les membres du tuple en tant que constantes explicitement nommées à utiliser dans le corps de la boucle


let numberOfLegs = ["araignée": 8, "fourmi": 6, "chat": 4]
for (animalName, legCount) in numberOfLegs {
    print("\(animalName) possède \(legCount) pattes")
}
// chat possède 4 pattes
// fourmi possède 6 pattes
// araignée possède 8 pattes

Le contenu d'un dictionnaire est intrinsèquement non ordonné, et, lors de son itération, rien ne garantit l'ordre dans lequel il sera récupéré. En particulier, l'ordre dans lequel vous insérez les éléments dans un dictionnaire ne définit pas l'ordre dans lequel ils sont itérés.

Les plages


for index in 1...5 {
    print("\(index) fois 5 = \(index * 5)")
}
// 1 fois 5 = 5
// 2 fois 5 = 10
// 3 fois 5 = 15
// 4 fois 5 = 20
// 5 fois 5 = 25

La séquence en cours d'itération est une plage de nombres allant de 1 à 5, inclus, comme indiqué par l'utilisation de l'opérateur de plage fermée. La valeur de index est définie sur le premier nombre de la plage (1) et les instructions à l'intérieur de la boucle sont exécutées. Dans ce cas, la boucle ne contient qu'une seule instruction qui imprime une entrée. Une fois l'instruction exécutée, la valeur de index est mise à jour pour contenir la deuxième valeur de la plage (2) et la fonction print est appelée à nouveau. Ce processus se poursuit jusqu'à ce que la fin de la plage soit atteinte.

Si vous n'avez pas besoin de chaque valeur d'une séquence, vous pouvez ignorer les valeurs en utilisant un trait de soulignement (_) à la place d'un nom de variable :


let base = 3, power = 10
var answer = 1
for _ in 1...power {
    answer *= base
    print(answer)  
}
// Cela va afficher :
// 3
// 9
// 27
// 81
// Etc ..
// 59049

Dans certaines situations, vous ne souhaiterez peut-être pas utiliser des plages fermées, qui incluent les deux points de terminaison. Par exemple, si vous envisagez de dessiner les graduations de chaque minute sur un cadran de montre. Il vous faudra utiliser l'opérateur de plage semi-ouverte ( ..<) pour inclure la limite inférieure mais pas la limite supérieure. Cependant, certains utilisateurs peuvent souhaiter moins de graduations dans leur interface utilisateur. Ils pourraient préférer un point toutes les 5minutes à la place. Utilisez la fonction stride(from:to:by:) pour graduer votre boucle :


let minuteInterval = 5
for tickMark in stride(from: 0, to: 60, by: minuteInterval) {
    // Toutes les 5 minutes (0, 5, 10, 15 ... 45, 50, 55)
}

Pour les plages fermées, utiliser la fonction stride(from:through:by:) :


for tickMark in stride(from: 3, through: 12, by: 3) {
    // Toutes les 3 heures (3, 6, 9, 12)
}