2016-01-27 10 views

Odpowiedz

21

Oto łatwiejsze (i bardziej Swift) podejście.

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-styl pętle ze stałym zwiększyć lub zmniejszyć można zastąpić przez stride():

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

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

Zastosowanie stride(to: ...) lub stride(through: ...) w zależności od tego, czy ostatni element powinien być włączony czy nie.

To jest dla Swift 2. Zmieniono składnię (ponownie) dla Swift 3, patrz this answer.

9

Można użyć stride metody:

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

lub klasyczny pętli while.

15

Od swift 3.0 metoda stride(to:by:) na Strideable został zastąpiony funkcją free, stride(from:to:by:)

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

Tak właśnie było w Swift 1. To, co stare, znowu jest nowe! –

+2

Dlaczego po prostu nie utrzymywać klasycznej pętli C-Style, to jest jak ponowne odkrywanie koła. – DeividKamui

1

Jeśli nadal chcesz korzystać z tej pętli C-stylu, tu jest to, czego potrzebujesz:

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