如何制作一个快速的类对象数组的副本

时间:2017-07-05 14:24:08

标签: arrays swift deep-copy

在下面的代码中,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

你有什么帮助吗?

3 个答案:

答案 0 :(得分:2)

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

struct Card ...

答案 1 :(得分:0)

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

Implementing copy() in Swift

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

答案 2 :(得分:0)

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