Swift中for in循环中修改i
let array = [1,2,3,4,5]
for var i in 0..<array.count {
print(array[i])
if i == 1 {
i += 2
continue
}
}
为什么这个打印的是
1
2
3
4
5
不是1,2,4,5?
在 Swift 中,for var i in 0..<array.count 创建了一个范围(range),并在每次循环迭代时设置 i 的值。在这个循环中,i 的值是从 0 到 array.count - 1。虽然你在循环体内对 i 进行了修改(i += 2),但这并不会影响循环外部的 i 值,因为每次迭代时 i 都会被重新赋值为范围中的下一个值。
代码分析
这里是代码的执行流程:
-
第一次迭代:
i= 0,打印array[0],输出1。
-
第二次迭代:
i= 1,打印array[1],输出2。- 然后执行
i += 2,此时i的值变为3。但这并不会影响下一次循环,因为下一次循环会将i重新赋值为2(即0..<array.count下的下一个值)。 continue语句导致跳过当前迭代的剩余部分,直接进入下一次迭代。
-
第三次迭代:
i= 2,打印array[2],输出3。
-
第四次迭代:
i= 3,打印array[3],输出4。
-
第五次迭代:
i= 4,打印array[4],输出5。
总结
- 在 Swift 的
for-in循环中,i的值是在每次迭代开始时重新赋值的,因此在循环中对i的修改并不会影响到循环的控制行为。 - 如果你想跳过某些元素,可以使用其他方式,比如使用
while循环,或者在打印时直接判断是否需要跳过某些索引。
示例代码
如果你想要实现 1, 2, 4, 5 的输出,可以使用以下代码:
let array = [1, 2, 3, 4, 5]
var i = 0
while i < array.count {
print(array[i])
if i == 1 {
i += 2
continue
}
i += 1
}
这种方式可以让你更灵活地控制 i 的值。

浙公网安备 33010602011771号