Shallow copy vs deep copy issue iOS Swift

1.4k Views Asked by At

I am facing issue to clone an object in swift 3. I want to duplicate/clone an object then want to modify it's value so that modification doesn't reflect on the actual object. Here is what I did.

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

patientInformation.firstName = "Some Name"

The above line actually not just modifying the local copy but also affecting the actual PatientInformationController.shared().pateintInformation.firstName The PateintInformation conforms to NSCopying protocol.

I have checked memory addresses for both objects (actual and copy), they are different.

In PatientInformation class:

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

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

There are 1 best solutions below

9
Eugene Laminskiy On

You've incorrectly implemented conformance of class to NSCopying protocol. You have same references in copy and in object, that's why changes happens. You can look here how to do it.