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

Swift for循环追加数组元素时所有元素变为最后一项问题求助

问题原因

你的song是class定义的引用类型,你在循环外仅初始化了一个song实例。循环过程中你每次修改的都是同一个实例的title属性,数组的append操作存储的是该实例的内存引用,而非独立的新实例。因此循环结束后数组内所有元素都指向同一个内存地址,取值自然全部是最后一次修改的结果。

修复方案

每次循环时创建新的song实例即可,同时建议你明确声明数组的元素类型,避免隐式类型推断带来的潜在问题,修改后的代码参考:

// 明确指定数组元素为Song类型,替换为你实际的Song类名即可
var songArray: [Song] = []
for item in randomItems! {
    // 每次循环生成新的Song实例,替换为你实际的初始化方法
    let song = Song()
    song.title = item.persistentID
    print(song.title)
    songArray.append(song)
    print(songArray.count)
}
print(randomItems!.count)
print(songArray.count)
print(songArray[0].title)
print(songArray[1].title)
print(songArray[5648].title)
print(songArray.last!.title)

如果你的Song类型本身不需要继承其他类,也可以将其从class改为struct,结构体属于值类型,append时会自动复制生成独立副本,不需要每次循环手动新建实例也能得到正确结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:51:02