所以我知道swift数组是作为struct实现的,它会自动自动复制.
我已经写了我的课MyClass
,我已经实现copyWithZone
了复制它
但是,我的swift数组包含我的MyClass
对象,例如:
var array = [MyClass]()
当我想制作那个阵列的副本时
var anotherArray = array
它仍然没有调用MyClassObject.copyWithZone
,后来如果我更改了对象属性array
,anotherArray
也会反映出更改.
如何在不编写for循环来迭代每个对象的情况下复制它?
它不像swift中的对象数组的深层副本那样重复,因为我不能使用struct来重写我的类.
作为一个简单的声明,您可以使用如下代码:
var copiedArray = array.map{$0.copy()}
请注意,术语"deepCopy"对于您所谈论的内容有点误导.如果数组是异构的并且包含其他容器(如数组,字典,集合以及其他自定义容器和"叶子"对象),该怎么办?你应该做的是创建一个DeepCopiable协议,并要求任何符合DeepCopiable的对象要求任何子对象也符合DeepCopiable协议,并编写deepCopy()方法以递归方式调用所有对象的deepCopy()儿童对象.这样你最终可以使用任意深度的深拷贝.