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

¿Cómo expressías un ciclo indexado decreciente en Swift 3.0, donde la syntax 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 

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 

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 syntax cambió (nuevamente) para Swift 3, mira esta respuesta .

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) } 

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 { return stride(from: left, to: right, by: -1) } for i in x..>0 { print(i) }