如何在Swift中复制"Dictionary"?

all*_*nli 28 copy deep-copy swift

如何在Swift中复制"Dictionary"?

也就是说,获取具有相同键/值但不同内存地址的另一个对象.

此外,如何在Swift中复制对象?

谢谢,

iku*_*dia 69

"字典"实际上是swift中的Struct,它是一种值类型.所以复制它就像:

let myDictionary = ...
let copyOfMyDictionary = myDictionary
Run Code Online (Sandbox Code Playgroud)

复制对象(这是一种引用类型)有几个不同的答案.如果对象采用NSCopying协议,那么你可以这样做:

let myObject = ...
let copyOfMyObject = myObject.copy()
Run Code Online (Sandbox Code Playgroud)

如果您的对象不符合,NSCopying那么您可能无法复制该对象.根据对象的类,它可以提供自己的方法来获取副本,或者如果对象没有内部私有状态,那么您可以创建具有相同属性的新对象.

[编辑纠正上一个答案中的错误 - NSObject(类和协议)不提供copy或copyWithZone方法,因此不足以复制对象]


jar*_*ora 7

这里给出的所有答案都很棒,但是他们错过了关于警告复制警告的关键点.

在Swift中,您有值类型(struct,enum,tuple,array,dict等)或引用类型(类).

如果需要复制类对象,则必须copyWithZone在类中实现方法,然后在对象上调用copy.

但是,如果您需要复制值类型对象,例如.和Array你可以直接复制它,只需将它分配给一个新的变量,如下所示:

let myArray = ...
let copyOfMyArray = myArray
Run Code Online (Sandbox Code Playgroud)

但这只是浅层复制.

如果您的数组包含类对象,并且您想要复制它们,则必须单独复制每个数组元素.这将允许您进行深层复制.

这是额外的信息,我认为这些信息会添加到上面写得很好的答案中已经提供的信息中.