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