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 的值是从 0array.count - 1。虽然你在循环体内对 i 进行了修改(i += 2),但这并不会影响循环外部的 i 值,因为每次迭代时 i 都会被重新赋值为范围中的下一个值。

代码分析

这里是代码的执行流程:

  1. 第一次迭代:

    • i = 0,打印 array[0],输出 1
  2. 第二次迭代:

    • i = 1,打印 array[1],输出 2
    • 然后执行 i += 2,此时 i 的值变为 3。但这并不会影响下一次循环,因为下一次循环会将 i 重新赋值为 2(即 0..<array.count 下的下一个值)。
    • continue 语句导致跳过当前迭代的剩余部分,直接进入下一次迭代。
  3. 第三次迭代:

    • i = 2,打印 array[2],输出 3
  4. 第四次迭代:

    • i = 3,打印 array[3],输出 4
  5. 第五次迭代:

    • 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 的值。

posted @ 2024-10-10 11:23  looxy  阅读(63)  评论(0)    收藏  举报