Aggiornato per Swift 3
La risposta di seguito è un riepilogo delle opzioni disponibili. Scegli quello più adatto alle tue esigenze.
reversed
: numeri in un intervallo
Inoltrare
for index in 0..<5 {
print(index)
}
// 0
// 1
// 2
// 3
// 4
a rovescio
for index in (0..<5).reversed() {
print(index)
}
// 4
// 3
// 2
// 1
// 0
reversed
: elementi in SequenceType
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Inoltrare
for animal in animals {
print(animal)
}
// horse
// cow
// camel
// sheep
// goat
a rovescio
for animal in animals.reversed() {
print(animal)
}
// goat
// sheep
// camel
// cow
// horse
reversed
: elementi con un indice
A volte è necessario un indice quando si scorre una raccolta. Per questo puoi usare enumerate()
, che restituisce una tupla. Il primo elemento della tupla è l'indice e il secondo elemento è l'oggetto.
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Inoltrare
for (index, animal) in animals.enumerated() {
print("\(index), \(animal)")
}
// 0, horse
// 1, cow
// 2, camel
// 3, sheep
// 4, goat
a rovescio
for (index, animal) in animals.enumerated().reversed() {
print("\(index), \(animal)")
}
// 4, goat
// 3, sheep
// 2, camel
// 1, cow
// 0, horse
Nota che, come ha notato Ben Lachman nella sua risposta , probabilmente vorrai fare .enumerated().reversed()
piuttosto che.reversed().enumerated()
(il che farebbe aumentare i numeri dell'indice).
passo: numeri
Stride è il modo di iterare senza usare un intervallo. Esistono due forme. I commenti alla fine del codice mostrano quale sarebbe la versione dell'intervallo (supponendo che la dimensione dell'incremento sia 1).
startIndex.stride(to: endIndex, by: incrementSize) // startIndex..<endIndex
startIndex.stride(through: endIndex, by: incrementSize) // startIndex...endIndex
Inoltrare
for index in stride(from: 0, to: 5, by: 1) {
print(index)
}
// 0
// 1
// 2
// 3
// 4
a rovescio
La modifica della dimensione dell'incremento -1
consente di tornare indietro.
for index in stride(from: 4, through: 0, by: -1) {
print(index)
}
// 4
// 3
// 2
// 1
// 0
Si noti la to
e through
differenza.
falcata: elementi di SequenceType
Avanti con incrementi di 2
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Sto usando 2
in questo esempio solo per mostrare un'altra possibilità.
for index in stride(from: 0, to: 5, by: 2) {
print("\(index), \(animals[index])")
}
// 0, horse
// 2, camel
// 4, goat
a rovescio
for index in stride(from: 4, through: 0, by: -1) {
print("\(index), \(animals[index])")
}
// 4, goat
// 3, sheep
// 2, camel
// 1, cow
// 0, horse
Appunti