ios - 浅拷贝与深拷贝问题 iOS Swift

标签 ios swift clone deep-copy nscopying

我在 swift 3 中克隆一个对象时遇到问题。我想复制/克隆一个对象然后修改它的值,这样修改就不会反射(reflect)在实际对象上。这是我所做的。

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

patientInformation.firstName = "Some Name"

上面这行实际上不仅修改了本地副本还影响了实际的PatientInformationController.shared().pateintInformation.firstName PateintInformation遵循NSCopying协议(protocol)。

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

在 PatientInformation 类中:

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

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

最佳答案

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

关于ios - 浅拷贝与深拷贝问题 iOS Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43544952/

相关文章:

ios - 如何确定带有已点击开关的单元格的 indexPath?

ios - 根据 UITableView Cell 内不同屏幕尺寸的文本长度计算 UILabel 高度

javascript - 克隆div时如何更改数据属性

c# - 克隆对象 : Is serialization - deserialization a good practice for cloning objects?

swift - 从核心数据中获取实体属性总和时出错

jquery - 如何使用 jQuery 复制和清除表单元素?

ios - 无法将对象从另一个类添加到 NSMutableArray

ios - Swift 的 Cocoapods,发布方案的链接器命令失败

ios - Xcode 边距奇怪的行为

ios - iOS 8.3 更新后 NSOutputStream 停止工作