2016-01-27 15 views

risposta

21

Ecco un approccio più semplice (e più Swifty).

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 
45

C-stile loop con un incremento fisso o decremento può essere sostituita da stride():

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

// 10 9 8 7 6 5 4 3 2 1 

Usa stride(to: ...) o stride(through: ...) a seconda che l'ultimo elemento deve essere incluso o meno.

Questo è per Swift 2. La sintassi è cambiata (di nuovo) per Swift 3, vedere this answer.

9

È possibile utilizzare il metodo stride:

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

o classico while.

15

Da swift 3.0, Il metodo stride(to:by:) su Strideable è stato sostituito con una funzione libera, stride(from:to:by:)

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

Questo era il modo in cui era in Swift 1. Che vecchio è nuovo di nuovo! –

+2

Perché non limitarti a mantenere il classico ciclo C-Style, è come reinventare la ruota. – DeividKamui

1

Se si desidera continuare a utilizzare questo loop in stile C, qui è quello che vi serve:

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