前言
Swift取消了OC中的C形式的for循环。只用一种单一的for - in
形式来取代。
本文将为大家介绍几种for - in
的姿势。
常规用法
常规用法与OC中的'for - in'用法一致,如:
let testArr = [9,7,3,8,5,2,1,0,6]
for num in testArr {
print(num)
}
过去在OC中我们想获取遍历的元素的索引都要通过i
来获得,现在可以通过enumerate
来获取
for num in testArr.enumerated() {
print(num.element,num.offset)
}
通过enumerate
可以方便的获得元素的下标和内容。官方注释中也提到了另外一种写法,使用元祖来方便获取元素索引。
for (n, c) in "Swift".characters.enumerated() {
print("\(n): '\(c)'")
}
/// // Prints "0: 'S'"
/// // Prints "1: 'w'"
/// // Prints "2: 'i'"
/// // Prints "3: 'f'"
/// // Prints "4: 't'"
同时,swift也提供了reverse()
方法,用法与enumerate
一致,可以反向遍历数组中的元素。
区间循环
- ...表示闭区间,如:0...10,表示0至10并且包含10
- ..<表示开区间,如:0..<10 表示0至9,不包含10
for i in 0..<10 {
print(i)
}
//0 1 2 3 4 5 6 7 8 9
for i in 0...10 {
print(i)
}
//0 1 2 3 4 5 6 7 8 9 10
stride语法
stride
语法提供了更大的灵活性,满足不同的递增条件以和开闭区间的结合。
func stride<T>(from start: T, to end: T, by stride: T.Stride)
func stride<T>(from start: T, through end: T, by stride: T.Stride)
//from:开始位置 by:递增步长
//to:结束位置,开区间,不包含
//through:结束位置,闭区间,包含
如:
for i in stride(from: 0, to: 10, by: 2) {
print(i)
}
//0 2 4 6 8
for i in stride(from: 0, through: 10, by: 2) {
print(i)
}
//0 2 4 6 8 10
如果我们想让i
递减,可以将步长也就是by
设置成负值,实现递减遍历。
总结
swfit中 'for - in'循环的几种用法十分方便,通过搭配能够为日常的编码带来带来效率的提升。
网友评论