Recherche…


Syntaxe

  • pour constante en séquence {instructions}
  • pour constante en séquence où condition {instructions}
  • pour var variable en séquence {instructions}
  • pour _ en séquence {instructions}
  • pour le cas laisser constante dans la séquence {instructions}
  • pour la casse constante dans l'ordre où condition {déclarations}
  • pour la variable var dans la séquence {instructions}
  • while condition {déclarations}
  • répétez les {instructions} pendant que la condition est
  • sequence.forEach (body: (Element) lance -> Void)

Boucle d'introduction

La boucle for-in vous permet d'effectuer une itération sur n'importe quelle séquence.

Itérer sur une gamme

Vous pouvez parcourir à la fois les plages ouvertes et fermées:

for i in 0..<3 {
    print(i)
}

for i in 0...2 {
    print(i)
}

// Both print:
// 0
// 1
// 2

Itérer sur un tableau ou un ensemble

let names = ["James", "Emily", "Miles"]

for name in names {
   print(name)
}

// James
// Emily
// Miles
2.1 2.2

Si vous avez besoin de l'index pour chaque élément du tableau, vous pouvez utiliser la méthode enumerate() sur SequenceType .

for (index, name) in names.enumerate() {
   print("The index of \(name) is \(index).")
}

// The index of James is 0.
// The index of Emily is 1.
// The index of Miles is 2.

enumerate() renvoie une séquence paresseuse contenant des paires d'éléments avec Int s consécutives, à partir de 0. Par conséquent, avec les tableaux, ces nombres correspondent à l'index donné de chaque élément - mais cela peut ne pas être le cas avec d'autres types de collections.

3.0

Dans Swift 3, enumerate() a été renommé en enumerated() :

for (index, name) in names.enumerated() {
   print("The index of \(name) is \(index).")
}

Itérer sur un dictionnaire

let ages = ["James": 29, "Emily": 24]

for (name, age) in ages {
    print(name, "is", age, "years old.")
}

// Emily is 24 years old.
// James is 29 years old.

Itérer en sens inverse

2.1 2.2

Vous pouvez utiliser la méthode reverse() sur SequenceType pour parcourir une séquence en sens inverse:

for i in (0..<3).reverse() {
    print(i)
}

for i in (0...2).reverse() {
    print(i)
}

// Both print:
// 2
// 1
// 0

let names = ["James", "Emily", "Miles"]

for name in names.reverse() {
    print(name)
}

// Miles
// Emily
// James
3.0

Dans Swift 3, reverse() a été renommé en reversed() :

for i in (0..<3).reversed() {
    print(i)
}

Itérer sur des plages avec une foulée personnalisée

2.1 2.2

En utilisant les méthodes stride(_:_:) sur Strideable vous pouvez parcourir une plage avec une foulée personnalisée:

for i in 4.stride(to: 0, by: -2) {
    print(i)
}

// 4
// 2

for i in 4.stride(through: 0, by: -2) {
    print(i)
}

// 4
// 2
// 0
1,2 3,0

Dans Swift 3, les méthodes stride(_:_:) sur Stridable ont été remplacées par les fonctions stride(_:_:_:) globales stride(_:_:_:) :

for i in stride(from: 4, to: 0, by: -2) {
    print(i)
}

for i in stride(from: 4, through: 0, by: -2) {
    print(i)
}

Boucle répétée

Semblable à la boucle while, seule l'instruction de contrôle est évaluée après la boucle. Par conséquent, la boucle sera toujours exécutée au moins une fois.

var i: Int = 0

repeat {
   print(i)
   i += 1
} while i < 3

// 0
// 1
// 2

en boucle

A while boucle exécutera tant que la condition est vraie.

var count = 1

while count < 10 {
    print("This is the \(count) run of the loop")
    count += 1
}

Type de séquence pour chaque bloc

Un type conforme au protocole SequenceType peut parcourir ses éléments dans une fermeture:

collection.forEach { print($0) }

La même chose pourrait être faite avec un paramètre nommé:

collection.forEach { item in
    print(item)
}

* Remarque: Les instructions de flux de contrôle (telles que la rupture ou la poursuite) peuvent ne pas être utilisées dans ces blocs. Un retour peut être appelé, et s'il est appelé, il retournera immédiatement le bloc pour l'itération en cours (un peu comme un continu). La prochaine itération sera alors exécutée.

let arr = [1,2,3,4]

arr.forEach {
    
    // blocks for 3 and 4 will still be called
    if $0 == 2 {
        return
    }
}

Boucle d'introduction avec filtrage

  1. where clause

En ajoutant une clause where , vous pouvez restreindre les itérations à celles qui satisfont à la condition donnée.

for i in 0..<5 where i % 2 == 0 {
    print(i)
}

// 0
// 2
// 4


let names = ["James", "Emily", "Miles"]

for name in names where name.characters.contains("s") {
    print(name)
}

// James
// Miles
  1. clause de case

Il est utile de ne parcourir que les valeurs correspondant à un motif:

let points = [(5, 0), (31, 0), (5, 31)]
for case (_, 0) in points {
    print("point on x-axis")
}

//point on x-axis
//point on x-axis

Vous pouvez également filtrer les valeurs facultatives et les déballer si nécessaire en ajoutant ? marque après liaison constante:

let optionalNumbers = [31, 5, nil]
for case let number? in optionalNumbers {
    print(number)
}

//31    
//5

Briser une boucle

Une boucle s'exécutera tant que sa condition reste vraie, mais vous pouvez l'arrêter manuellement à l'aide du mot-clé break . Par exemple:

var peopleArray = ["John", "Nicole", "Thomas", "Richard", "Brian", "Novak", "Vick", "Amanda", "Sonya"]
var positionOfNovak = 0

for person in peopleArray {
    if person == "Novak" { break }
    positionOfNovak += 1
}

print("Novak is the element located on position [\(positionOfNovak)] in peopleArray.")
//prints out: Novak is the element located on position 5 in peopleArray. (which is true)


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow