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
相关产品推荐
相关产品推荐

