我是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
答案 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)