0

我在 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) 
}
4

1 回答 1

1

您错误地实现了类对 NSCopying 协议的一致性。您在副本和对象中具有相同的引用,这就是发生更改的原因。你可以看看这里是怎么做的。

于 2017-04-21T14:49:16.043 回答