Atualizado para o Swift 3
A resposta abaixo é um resumo das opções disponíveis. Escolha o que melhor se adapta às suas necessidades.
reversed
: números em um intervalo
frente
for index in 0..<5 {
print(index)
}
// 0
// 1
// 2
// 3
// 4
Para trás
for index in (0..<5).reversed() {
print(index)
}
// 4
// 3
// 2
// 1
// 0
reversed
: elementos em SequenceType
let animals = ["horse", "cow", "camel", "sheep", "goat"]
frente
for animal in animals {
print(animal)
}
// horse
// cow
// camel
// sheep
// goat
Para trás
for animal in animals.reversed() {
print(animal)
}
// goat
// sheep
// camel
// cow
// horse
reversed
: elementos com um índice
Às vezes, é necessário um índice ao percorrer uma coleção. Para isso você pode usar enumerate()
, o que retorna uma tupla. O primeiro elemento da tupla é o índice e o segundo elemento é o objeto.
let animals = ["horse", "cow", "camel", "sheep", "goat"]
frente
for (index, animal) in animals.enumerated() {
print("\(index), \(animal)")
}
// 0, horse
// 1, cow
// 2, camel
// 3, sheep
// 4, goat
Para trás
for (index, animal) in animals.enumerated().reversed() {
print("\(index), \(animal)")
}
// 4, goat
// 3, sheep
// 2, camel
// 1, cow
// 0, horse
Observe que, como Ben Lachman observou em sua resposta , você provavelmente deseja fazer .enumerated().reversed()
mais do que .reversed().enumerated()
(o que aumentaria o número de índices).
stride: numbers
Stride é uma maneira de iterar sem usar um intervalo. Existem duas formas. Os comentários no final do código mostram qual seria a versão do intervalo (assumindo que o tamanho do incremento seja 1).
startIndex.stride(to: endIndex, by: incrementSize) // startIndex..<endIndex
startIndex.stride(through: endIndex, by: incrementSize) // startIndex...endIndex
frente
for index in stride(from: 0, to: 5, by: 1) {
print(index)
}
// 0
// 1
// 2
// 3
// 4
Para trás
Alterar o tamanho do incremento para -1
permite retroceder.
for index in stride(from: 4, through: 0, by: -1) {
print(index)
}
// 4
// 3
// 2
// 1
// 0
Observe a diferença to
e through
.
stride: elementos de SequenceType
Avançar em incrementos de 2
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Estou usando 2
neste exemplo apenas para mostrar outra possibilidade.
for index in stride(from: 0, to: 5, by: 2) {
print("\(index), \(animals[index])")
}
// 0, horse
// 2, camel
// 4, goat
Para trás
for index in stride(from: 4, through: 0, by: -1) {
print("\(index), \(animals[index])")
}
// 4, goat
// 3, sheep
// 2, camel
// 1, cow
// 0, horse
Notas