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