Arrays 附加到对象数组

Arrays 附加到对象数组,arrays,swift,append,Arrays,Swift,Append,我是Swift的初学者。这个问题快把我逼疯了。现在看了几个小时,但我解决不了。非常感谢你的帮助 我有一个对象数组。我想把对象附加到数组中。每个对象包含一个PID和一个名称。CurrentObject被初始化为“Queen” var stackObjects:[Object] = [] 在UITableView didSelectRowAtIndexPath中,必须将所选项目添加到数组中: func tableView(tableView: UITableView, didSelectRowAt

我是Swift的初学者。这个问题快把我逼疯了。现在看了几个小时,但我解决不了。非常感谢你的帮助

我有一个对象数组。我想把对象附加到数组中。每个对象包含一个PID和一个名称。CurrentObject被初始化为“Queen”

var stackObjects:[Object] = []
在UITableView didSelectRowAtIndexPath中,必须将所选项目添加到数组中:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    print ("Appending \(currentObject.name)")    // The selected one is printed

    stackObjects.append(currentObject)      // Append the selected

    for(var i=0;i< stackObjects.count ; i++) {
        let plop:Object = stackObjects[i]
        print("#\(i) = \(plop.name)")       // Here the array is printed
    }

    // Get the selected item for the next run
    let selectedObject = someArray[indexPath.row]
    currentObject.pid = selectedObject.pid
    currentObject.name = selectedObject.name
}
我希望/期望得到如下结果:

Appending Queen
#0 = Queen
Appending David Bowie
#0 = Queen
#1 = David Bowie
Appending Boston
#0 = Queen
#1 = David Bowie
#2 = Boston
添加对象后,将对其进行变异。 默认情况下,数组保留其元素,但不复制它们。对于您来说,这意味着每个数组元素和currentObject引用同一个对象。 ==>您一直在重复使用和修改currentObject


要么将其复制到数组中,要么在插入一个currentObject后创建一个新的currentObject。

根据Daij Djan的答案(首选答案),我已经实现了一个解决方案。这是通过创建一个新对象来完成的。每次将对象追加到数组之前都必须执行此操作。以确保未附加任何链接对象

在append语句之前添加3行代码:

let tmpObject = Object()
tmpObject.pid = currentObject.pid
tmpObject.name = currentObject.name
stackArtists.append(tmpObject)
并将append语句中的“currentObject”替换为“TMPOObject”:

let tmpObject = Object()
tmpObject.pid = currentObject.pid
tmpObject.name = currentObject.name
stackArtists.append(tmpObject)

你能发布完整的代码吗?我的意思是你在哪里设置currentObjectcurrentObjects是Object类型的,它的值被初始化为“Queen”。它只在上面列出的代码中设置。我会在你插入它之后再做一个新的。谢谢你给我指明了正确的方向。经过一些搜索,我发现Beta3数组中的哪些列表不再是引用类型(正如人们所期望的)。现在下载Beta3。谢谢你!啊。。。你搞错了。数组仅引用内容-从未更改。这不是关于数组本身,而是关于当前对象。。。