【iOS开发】复制一个对象

我们都知道,对象之间的传递是引用传递。例如有一个Apple类,有两个Apple实例对象a和b,其中a指向redApple,把a赋值给b,即b = a,实际上b也是指向redApple。也就是说a和b都是指向同一个redApple,改变redApple的属性,a和b也会同时改变。

在开发过程中,有时候需要复制一份新的redApple,然后在赋值给b,即a和b分别指向各自的redApple,这时两个redApple各个属性值相等,只是存储的地址不一样。改变其中一个redApple的属性值,不会影响另外一个redApple。为了达到这个需求,Apple类需要实现NSCopying协议。代码演示如下:

class Apple: NSCopying {
    
    var color: String?
    
    // MARK: 实现NSCopying协议
    func copy(with zone: NSZone? = nil) -> Any {
        let apple = Apple()
        apple.color = self.color
        return apple
    }
}

然后其他类调用的时候如下:

let apple = Apple()
apple.color = "red"
let anotherApple = apple.copy(with: nil) as! Apple

这样就完成了对自定义类对象的复制。

金无足赤,人无完人。如果文中有错误,请指出!我们共同学习,共同进步。谢谢!

你可能感兴趣的:(【iOS开发】复制一个对象)