You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中for循环修改数组元素后循环内打印仍为旧值的问题

现象原因说明
  • 首先Swift中的数组属于值类型,当你使用 for (index,item) in arr3.enumerated() 启动遍历的时候,系统会首先对执行遍历前的 arr3 生成一份只读的快照,循环中拿到的每一个 item 都是这份初始快照里的元素值拷贝,和后续修改后的原数组没有关联。
  • 你在循环内部修改 arr3[index+1] 的操作,作用的是原数组的内存空间,因为值类型的写时复制特性,修改操作不会同步更新遍历用的初始快照,所以循环里打印的 item 一直是遍历开始时的旧值。
  • 你最终打印整个数组得到的是修改后的结果,是因为你操作的确实是原数组本身,只是遍历用的快照没有同步更新而已。
解决方法

如果要输出修改后的实时值,直接通过下标访问原数组的当前元素即可,把循环内的 print(item) 替换为 print(arr3[index]) 就能得到你预期的输出,修正后代码如下:

var arr3 = [1,2,3]
        
for (index,_) in arr3.enumerated() {
    if index+1 < arr3.count {
        arr3[index + 1] = arr3[index+1] + 1
    } 
    print(arr3[index])
}
print(arr3)

内容的提问来源于stack exchange,提问作者Himan Dhawan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:54:02