【问题标题】:Append to Array of Objects追加到对象数组
【发布时间】:2015-10-20 09:23:12
【问题描述】:

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

【问题讨论】:

  • 你能把整个代码贴出来吗,我的意思是你在哪里设置 currentObject
  • currentObjects 是 Object 类型,它的值被初始化为“Queen”。只在上面列出的代码中设置。

标签: arrays swift append


【解决方案1】:

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

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

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

【讨论】:

  • 插入一次后创建一个新的
  • 感谢您为我指明正确的方向。经过一番搜索,我发现blog.human-friendly.com/swift-arrays-beta-3-hooray 列出了 Beta3 数组中的引用类型不再是引用类型(正如人们所期望的那样)。现在下载Beta3。谢谢你!
  • 啊……你搞错了。数组仅引用内容 - 从未改变。这不是关于数组本身,而是关于当前对象...
【解决方案2】:

根据 Daij-Djan 的回答(首选答案),我实施了一个解决方案。这是通过创建一个新对象来完成的。这必须在每次将对象附加到数组之前完成。确保没有附加链接对象。

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

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

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

stackArtists.append(tmpObject)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    相关资源
    最近更新 更多