arrays - 追加到对象数组

标签 arrays swift append

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

我有一个对象数组。我想将对象 append 到数组中。每个对象都包含一个 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

最佳答案

添加对象后,您将对其进行变异。

数组保留其元素,但默认不复制它们。对于您来说,这意味着每个数组元素和 currentObject 引用同一个对象。 ==> 你不断重用和修改 currentObject。

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

关于arrays - 追加到对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33232784/

相关文章:

ios - View Controller 无法访问数组中的元素

Swift 从闭包中获取返回值并使用它从它所在的闭包中返回

swift - 如何将 Property<Int> 转换为 SignalProducer<Int, PossibleError>?

javascript - 使用appendchild将一个div添加到另一个div

php - 将第一个单词发送到数组中的最后一个位置

javascript - 如何使用Nightmare.js JavaScript转到URL数组

xcode - Swift - 如何设置 XCUIElement 的值

Golang 从 slice append 函数 "evaluated but not used"中删除重复整数

c++ - 构造以特定前缀开头的特定长度的字符串

c++ - 如何将多个字符串转换成同一个char数组?