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 @   looxy  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示