Swift Language
Loops
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
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.
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
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
In Swift 3 is de naam reverse()
gewijzigd in reversed()
:
for i in (0..<3).reversed() {
print(i)
}
Doorlopen over bereiken met aangepaste pas
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
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
-
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
-
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)