swift for-loop decrement

Decremento del índice en un ciclo después de que los bucles Swift estilo C desaprobados



for-loop (5)

Aquí hay un enfoque más fácil (y más rápido).

for i in (0 ..< 5).reversed() { print(i) // 4,3,2,1,0 } let array = ["a", "b", "c", "d", "e"] for element in array.reversed() { print(element) // e,d,c,b,a } array.reversed().forEach { print($0) } // e,d,c,b,a print(Array(array.reversed())) // e,d,c,b,a

¿Cómo expresarías un ciclo indexado decreciente en Swift 3.0, donde la sintaxis siguiente ya no es válida?

for var index = 10 ; index > 0; index-=1{ print(index) } // 10 9 8 7 6 5 4 3 2 1


Desde swift 3.0 , el método stride(to:by:) en Strideable ha sido reemplazado por una función gratuita, stride(from:to:by:)

for index in stride(from: 10, to: 0, by: -1){ print(index) }


Los bucles tipo C con un incremento o decremento fijo se pueden reemplazar por stride() :

for index in 10.stride(to: 0, by: -1) { print(index) } // 10 9 8 7 6 5 4 3 2 1

Utilice stride(to: ...) o stride(through: ...) dependiendo de si el último elemento debe incluirse o no.

Esto es para Swift 2. La sintaxis cambió (nuevamente) para Swift 3, mira esta respuesta .


Puedes usar el método de stride :

10.stride(through: 0, by: -1).forEach { print($0) }

o clásico while loop.


Si aún desea utilizar este ciclo estilo C, aquí está lo que necesita:

let x = 10 infix operator ..> { associativity left } func ..>(left: Int, right: Int) -> StrideTo<Int> { return stride(from: left, to: right, by: -1) } for i in x..>0 { print(i) }