2016-01-27 10 views

Antwort

21

Hier ist ein einfacher (und mehr Swifty) Ansatz.

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-style-Schleifen mit einem festen Inkrement oder Dekrement kann durch stride() ersetzt:

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

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

Verwenden stride(to: ...) oder stride(through: ...) auf das letzte Element in Abhängigkeit, ob einbezogen werden sollten oder nicht.

Dies ist für Swift 2. Die Syntax wurde (wieder) für Swift 3 geändert, siehe this answer.

9

können Sie stride Methode verwenden:

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

oder klassische while-Schleife.

15

Von swift 3.0, Die stride(to:by:) Methode auf Strideable hat mit einer freien Funktion ersetzt, stride(from:to:by:)

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

So war es in Swift 1. Was alt ist wieder neu! –

+2

Warum nicht einfach den klassischen C-Style Loop beibehalten, das ist wie das Rad neu erfinden. – DeividKamui

1

Wenn Sie immer noch diese C-Stil Schleife verwenden möchten, hier ist das, was Sie brauchen:

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