【问题标题】:How to make a copy of a swift array of class objects如何复制一个快速的类对象数组
【发布时间】:2017-07-05 14:24:08
【问题描述】:

在下面的代码中,list1 是原始数组。 当我在 list2 中复制 list1 时,它会传递“allCardList”数组作为参考,但我想创建 list1 的副本,所以当我在 list2 中更改时,它不应该更改原始数组(list1)

class Card {
    var availableBalance        = "5"
}
class DataCacheManager: NSObject {
    var allCardList             = [Card]()
}
var card = Card()
card.availableBalance = "10"

var list1 = DataCacheManager()
list1.allCardList.append(card)

var list2 = DataCacheManager()

for item in list1.allCardList {
    list2.allCardList.append(item)
}

list2.allCardList[0].availableBalance = "20"

print(list1.allCardList[0].availableBalance) // print 20 but should return 10

对你有帮助吗?

【问题讨论】:

  • 当然它会打印 20,因为您正在更改参考对象。如果你想有不同的值,你需要深拷贝你的数组。
  • 我怎样才能拥有深拷贝?

标签: arrays swift deep-copy


【解决方案1】:

class 具有引用语义。最简单的解决方案是使用值语义

struct Card ...

【讨论】:

    【解决方案2】:

    看看这个问题,它描述了复制单个对象的过程。

    Implementing copy() in Swift

    添加复制功能后,使用for 循环遍历您的数组,以从现有数据创建复制的数组。

    【讨论】:

      【解决方案3】:

      请阅读这些参考资料 How do I make a exact duplicate copy of an array?1deep copy array 在您的情况下,还有其他方法可以在不复制整个数组的情况下满足您的要求。例如,您可以将只读原始值作为 Card 中的对象,并为新值设置另一个变量,依此类推。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-01
        • 2016-06-20
        • 2015-05-08
        • 2021-10-04
        • 1970-01-01
        • 2016-09-21
        • 2013-05-28
        • 1970-01-01
        相关资源
        最近更新 更多