该换的循环可以让你迭代任何序列。
您可以遍历半开和封闭范围:
for i in 0..<3 { print(i) } for i in 0...2 { print(i) } // 都打印: // 0 // 1个个 // 2
let names = ["James", "Emily", "Miles"] for name in names { print(name) } // 詹姆士 // 艾米莉 // 迈尔斯
如果需要数组中每个元素的索引,则可以使用enumerate()on方法SequenceType。
for (index, name) in names.enumerate() { print("The index of \(name) is \(index).") } // 詹姆斯的索引是0。 // 艾米丽的指数是1。 // 英里的索引是2。
enumerate()返回一个包含Int从0开始的连续s元素对的惰性序列。因此,对于数组,这些数字将对应于每个元素的给定索引-但是,其他类型的集合可能不是这种情况。
在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, "岁。") } // 艾米莉 is 24 岁。 // 詹姆士 is 29 岁。
您可以使用reverse()on方法SequenceType来反向迭代任何序列:
for i in (0..<3).reverse() { print(i) } for i in (0...2).reverse() { print(i) } // 都打印: // 2 // 1个个 // 0 let names = ["James", "Emily", "Miles"] for name in names.reverse() { print(name) } // 迈尔斯 // 艾米莉 // 詹姆士
在Swift 3中,reverse()已重命名为reversed():
for i in (0..<3).reversed() { print(i) }
通过使用上的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
在Swift 3中,上的stride(_:_:)方法Stridable已被全局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) }