Actualizado para Swift 3
La respuesta a continuación es un resumen de las opciones disponibles. Elija el que mejor se adapte a sus necesidades.
reversed
: números en un rango
Adelante
for index in 0..<5 {
print(index)
}
// 0
// 1
// 2
// 3
// 4
Hacia atrás
for index in (0..<5).reversed() {
print(index)
}
// 4
// 3
// 2
// 1
// 0
reversed
: elementos en SequenceType
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Adelante
for animal in animals {
print(animal)
}
// horse
// cow
// camel
// sheep
// goat
Hacia atrás
for animal in animals.reversed() {
print(animal)
}
// goat
// sheep
// camel
// cow
// horse
reversed
: elementos con un índice
A veces se necesita un índice cuando se itera por una colección. Para eso puedes usar enumerate()
, que devuelve una tupla. El primer elemento de la tupla es el índice y el segundo elemento es el objeto.
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Adelante
for (index, animal) in animals.enumerated() {
print("\(index), \(animal)")
}
// 0, horse
// 1, cow
// 2, camel
// 3, sheep
// 4, goat
Hacia atrás
for (index, animal) in animals.enumerated().reversed() {
print("\(index), \(animal)")
}
// 4, goat
// 3, sheep
// 2, camel
// 1, cow
// 0, horse
Tenga en cuenta que, como señaló Ben Lachman en su respuesta , es probable que desee hacerlo en .enumerated().reversed()
lugar de .reversed().enumerated()
(lo que aumentaría los números de índice).
zancada: números
Stride es una forma de iterar sin usar un rango. Hay dos formas Los comentarios al final del código muestran cuál sería la versión del rango (suponiendo que el tamaño del incremento sea 1).
startIndex.stride(to: endIndex, by: incrementSize) // startIndex..<endIndex
startIndex.stride(through: endIndex, by: incrementSize) // startIndex...endIndex
Adelante
for index in stride(from: 0, to: 5, by: 1) {
print(index)
}
// 0
// 1
// 2
// 3
// 4
Hacia atrás
Cambiar el tamaño de incremento a le -1
permite retroceder.
for index in stride(from: 4, through: 0, by: -1) {
print(index)
}
// 4
// 3
// 2
// 1
// 0
Tenga en cuenta la to
y la through
diferencia.
zancada: elementos de SequenceType
Adelante por incrementos de 2
let animals = ["horse", "cow", "camel", "sheep", "goat"]
Estoy usando 2
en este ejemplo solo para mostrar otra posibilidad.
for index in stride(from: 0, to: 5, by: 2) {
print("\(index), \(animals[index])")
}
// 0, horse
// 2, camel
// 4, goat
Hacia atrá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