For-in 迴圈

換的迴圈可以讓你迭代任何序列。

迭代範圍

你可以迭代半開和關閉範圍:

for i in 0..<3 {
    print(i)
}

for i in 0...2 {
    print(i)
}

// Both print:
// 0
// 1
// 2

迭代陣列或集合

let names = ["James", "Emily", "Miles"]

for name in names {
   print(name)
}

// James
// Emily
// Miles

Version = 2.2

如果你需要為每一個元素的索引陣列中,你可以使用 enumerate() 的方法 SequenceType

for (index, name) in names.enumerate() {
   print("The index of \(name) is \(index).")
}

// The index of James is 0.
// The index of Emily is 1.
// The index of Miles is 2.

enumerate() 返回一個包含連續 Int 的元素對的延遲序列,從 0 開始。因此,對於陣列,這些數字將對應於每個元素的給定索引 - 但是其他型別的集合可能不是這種情況。

Version >= 3.0

在 Swift 3 中,enumerate() 已更名為 enumerated()

for (index, name) in names.enumerated() {
   print("The index of \(name) is \(index).")
}

迭代字典

let ages = ["James": 29, "Emily": 24]

for (name, age) in ages {
    print(name, "is", age, "years old.")
}

// Emily is 24 years old.
// James is 29 years old.

反向迭代

Version = 2.2

你可以使用 reverse() 的方法 SequenceType 以任何順序遍歷相反:

for i in (0..<3).reverse() {
    print(i)
}

for i in (0...2).reverse() {
    print(i)
}

// Both print:
// 2
// 1
// 0

let names = ["James", "Emily", "Miles"]

for name in names.reverse() {
    print(name)
}

// Miles
// Emily
// James

Version >= 3.0

在 Swift 3 中,reverse() 已更名為 reversed()

for i in (0..<3).reversed() {
    print(i)
}

使用自定義步幅迭代範圍

Version = 2.2

通過使用 stride(_:_:) 的方法 Strideable 你可以通過使用自定義步幅範圍迭代:

for i in 4.stride(to: 0, by: -2) {
    print(i)
}

// 4
// 2

for i in 4.stride(through: 0, by: -2) {
    print(i)
}

// 4
// 2
// 0

Version >= 3.0

在 Swift 3 中,Stridable 上的 stride(_:_:) 方法已被全域性 stride(_:_:_:) 函式取代 :

for i in stride(from: 4, to: 0, by: -2) {
    print(i)
}

for i in stride(from: 4, through: 0, by: -2) {
    print(i)
}