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

Swift中使用.append初始化对象数组未达预期的原因解析

Swift对象数组初始化异常原因解析

在Xcode 15.0.1的Swift开发环境中,初始化Item类的对象数组时出现异常:所有数组元素均持有最后一个初始化对象的值。以下是两种不同写法及对应的结果:

无效写法

var item = Item()
  
for i in 0...2 {
    item.naam = "naam\(i)"
    item.datum = "datum\(i)"
    items.append(item)
}
        
for i in items {
    print(i.naam, i.datum)
}

执行结果:

naam2 datum2
naam2 datum2
naam2 datum2

有效写法

var item = Item()
  
for i in 0...2 {
    item.naam = "naam\(i)"
    item.datum = "datum\(i)"
    items.append(Item("naam\(i)", "datum\(i)"))
}
        
for i in items {
    print(i.naam, i.datum)
}

执行结果:

naam0 datum0
naam1 datum1
naam2 datum2

原因解释

Swift中类是引用类型,变量存储的是对象在内存中的引用地址,而非对象本身。

  • 无效写法里,你只创建了一个Item实例,循环中每次修改的都是同一个实例的属性值,然后把这个实例的引用重复添加到数组里。数组里的三个元素其实指向内存中同一个对象,最后一次循环修改了该对象的属性,所以遍历数组时看到的都是最后一次修改后的结果。
  • 有效写法里,每次循环都通过Item("naam\(i)", "datum\(i)")创建了新的Item实例,每个实例都有独立的内存地址,数组元素分别指向不同对象,自然能保留各自的属性值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:32:36