我是 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/