Copy 如何复制一个;字典;斯威夫特?
如何在Swift中复制“词典” 也就是说,获取另一个具有相同键/值但不同内存地址的对象 此外,如何在Swift中复制对象Copy 如何复制一个;字典;斯威夫特?,copy,swift,deep-copy,Copy,Swift,Deep Copy,如何在Swift中复制“词典” 也就是说,获取另一个具有相同键/值但不同内存地址的对象 此外,如何在Swift中复制对象 谢谢,字典实际上是swift中的结构,它是一种值类型。因此,复制它非常容易: let myDictionary = ... let copyOfMyDictionary = myDictionary 复制对象(引用类型)有两个不同的答案。如果对象采用NSCopying协议,则您只需执行以下操作: let myObject = ... let copyOfMyObject =
谢谢,字典实际上是swift中的结构,它是一种值类型。因此,复制它非常容易:
let myDictionary = ...
let copyOfMyDictionary = myDictionary
复制对象(引用类型)有两个不同的答案。如果对象采用NSCopying
协议,则您只需执行以下操作:
let myObject = ...
let copyOfMyObject = myObject.copy()
如果您的对象不符合NSCopying
,则您可能无法复制该对象。根据对象的类,它可以提供自己的方法来获取副本,或者如果对象没有内部私有状态,则可以创建具有相同属性的新对象
[编辑以更正前面答案中的错误-NSObject(类和协议)不提供copy或copyWithZone方法,因此不足以复制对象]对象
class Person: NSObject, NSCopying {
var firstName: String
var lastName: String
var age: Int
init(firstName: String, lastName: String, age: Int) {
self.firstName = firstName
self.lastName = lastName
self.age = age
}
func copyWithZone(zone: NSZone) -> AnyObject {
let copy = Person(firstName: firstName, lastName: lastName, age: age)
return copy
}
}
用法
资料来源:这里给出的所有答案都很好,但它们忽略了一个关键点,即警告您复制的注意事项 在Swift中,可以使用值类型(结构、枚举、元组、数组、dict等)或引用类型(类) 如果需要复制类对象,则必须在类中实现方法
copyWithZone
,然后对该对象调用copy
但如果需要复制值类型对象,例如数组,则可以直接复制,只需将其分配给新变量,如下所示:
let myArray = ...
let copyOfMyArray = myArray
但这只是肤浅的复制。
如果数组包含类对象,并且您也希望复制它们,则必须单独复制每个数组元素。这将允许您进行深度复制
这是额外的信息,我认为这些信息会添加到上面写得很好的答案中。我在我的另一个问题中问过这一点:)。看看你从文章中复制的代码,你是否忘记了正确的方法签名?即:
copy(带区域:NSZone?=nil)
let myArray = ...
let copyOfMyArray = myArray