Zoeken…


Syntaxis

  • voor constante in volgorde {statements}
  • voor constante in volgorde waarin voorwaarde {statements}
  • voor var variabele in volgorde {statements}
  • voor _ in volgorde {statements}
  • voor geval laat constante in volgorde {statements}
  • voor geval laat constant in volgorde waar conditie {statements}
  • voor case var variabele in volgorde {statements}
  • terwijl conditie {statements}
  • herhaal {statements} terwijl conditie
  • sequence.forEach (body: (Element) gooit -> Nietig)

For-in lus

Met de for-in- lus kunt u elke reeks herhalen.

Over een bereik heen lopen

U kunt itereren over zowel halfopen als gesloten bereiken:

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

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

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

Itereren over een array of set

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

for name in names {
   print(name)
}

// James
// Emily
// Miles
2.1 2.2

Als u de index voor elk element in de array nodig hebt, kunt u de methode enumerate() op 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() retourneert een luie reeks met paren van elementen met opeenvolgende Int s, beginnend bij 0. Daarom zullen deze getallen bij arrays overeenkomen met de gegeven index van elk element - dit is misschien niet het geval bij andere soorten collecties.

3.0

In Swift 3, enumerate() is hernoemd naar enumerated() :

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

Herhalen over een woordenboek

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.

In omgekeerde volgorde

2.1 2.2

U kunt de methode reverse() op SequenceType om elke volgorde in omgekeerde volgorde te herhalen:

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

In Swift 3 is de naam reverse() gewijzigd in reversed() :

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

Doorlopen over bereiken met aangepaste pas

2.1 2.2

Door de stride(_:_:) methoden op Strideable kunt u een bereik herhalen met een aangepaste stride:

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

In Swift 3 zijn de stride(_:_:) methoden op Stridable vervangen door de globale stride(_:_:_:) functies:

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

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

Herhaal-lus

Net als bij de while-lus, wordt alleen de besturingsopdracht na de lus geëvalueerd. Daarom wordt de lus altijd minstens één keer uitgevoerd.

var i: Int = 0

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

// 0
// 1
// 2

herhalingslus

Een while lus wordt uitgevoerd zolang de voorwaarde waar is.

var count = 1

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

Volgorde Type voor elk blok

Een type dat voldoet aan het SequenceType-protocol kan zijn elementen doorlopen binnen een afsluiting:

collection.forEach { print($0) }

Hetzelfde kan ook worden gedaan met een parameter met de naam:

collection.forEach { item in
    print(item)
}

* Opmerking: Control flow statements (zoals break of continue) mogen niet worden gebruikt in deze blokken. Een terugkeer kan worden opgeroepen en zal, indien geroepen, het blok onmiddellijk retourneren voor de huidige iteratie (ongeveer zoals een doorgaan zou doen). De volgende iteratie wordt dan uitgevoerd.

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

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

For-in-lus met filtering

  1. where clausule

Door een where clausule toe te voegen, kunt u de iteraties beperken tot degene die aan de gegeven voorwaarde voldoen.

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. case clausule

Dit is handig wanneer u alleen de waarden moet doorlopen die overeenkomen met een bepaald patroon:

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

Ook kunt u optionele waarden filteren en desgewenst uitpakken door toe te voegen ? markeren na bindende constante:

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

//31    
//5

Een lus doorbreken

Een lus wordt uitgevoerd zolang de toestand ervan waar blijft, maar u kunt deze handmatig stoppen met behulp van het sleutelwoord break . Bijvoorbeeld:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow