Decrement index in a loop after Swift C-style loops deprecated

C-style loops with a fixed increment or decrement can be replaced by stride():

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

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

Use stride(to: ...) or stride(through: ...) depending on whether the last element should be included or not.

This is for Swift 2. The syntax changed (again) for Swift 3, see this answer.


From swift 3.0, The stride(to:by:) method on Strideable has been replaced with a free function, stride(from:to:by:)

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

// You can also use stride condition like
// {Some Value}.stride(to: 0, by: -1)
// for index in 10.stride(to: 0, by: -1) { }

Here is an easier (and more Swifty) approach.

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