附加到对象数组

时间:2015-10-20 09:23:12

标签: arrays swift append

我是Swift的初学者。这个问题让我抓狂。现在看几个小时,但我无法解决它。帮助非常合适!

我有一个对象数组。我想将对象追加到数组中。每个对象包含一个PID和一个NAME.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
}

我没有在我的代码中的任何其他地方使用数组stackObjects。

选择和打印时,我得到这个输出:

Appending Queen
#0 = Queen
Appending David Bowie
#0 = David Bowie
#1 = David Bowie
Appending Boston
#0 = Boston
#1 = Boston
#2 = Boston

我希望/期待像::

这样的输出
Appending Queen
#0 = Queen
Appending David Bowie
#0 = Queen
#1 = David Bowie
Appending Boston
#0 = Queen
#1 = David Bowie
#2 = Boston

2 个答案:

答案 0 :(得分:0)

添加后你会改变你的对象。

数组保留其元素,但默认情况下不要复制它们。对于您而言,这意味着每个数组元素和currentObject引用相同的对象。 ==&GT;你不断重用和修改currentObject。

将其复制到数组中,或者在插入一个新的currentObject后再生成一个。

答案 1 :(得分:0)

基于Daij-Djan(优先回答)的答案,我实施了一个解决方案。这是通过创建一个新对象来完成的。在将对象附加到数组之前,必须每次都执行此操作。确保没有附加链接对象。

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

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

在append语句中将'currentObject'替换为'tmpObject':

stackArtists.append(tmpObject)