浅拷贝与深拷贝问题iOS Swift

时间:2017-04-21 14:13:49

标签: ios swift clone deep-copy nscopying

我面临在swift 3中克隆对象的问题。我想复制/克隆一个对象,然后想要修改它的值,以便修改不反映实际对象。这就是我所做的。

let patientInformation = PatientInformationController.shared().pateintInformation.copy() as! PateintInformation

patientInformation.firstName = "Some Name"

上述行实际上不仅修改了本地副本,还影响了实际的PatientInformationController.shared()。pateintInformation.firstName PateintInformation符合NSCopying协议。

我检查了两个对象(实际和副本)的内存地址,它们是不同的。

在PatientInformation课程中:

required public init(instance: PateintInformation) {
    self.firstName = instance.firstName
}

public func copy(with zone: NSZone? = nil) -> Any { 
    return PateintInformation(instance: self) 
}

1 个答案:

答案 0 :(得分:1)

您错误地将类与NSCopying协议的一致性实现。您在副本和对象中具有相同的引用,这就是更改发生的原因。您可以查看here如何操作。