美文网首页Swiftswift
Swift中使用copy方法来复制对象

Swift中使用copy方法来复制对象

作者: jezong | 来源:发表于2016-09-27 17:29 被阅读0次

在swift中,NSObject的子类可以使用copy方法来复制实例对象,做法如下:

  1. 子类必须声明并实现NSCopying协议;
  2. 子类实现copyWithZone:方法;
  3. 子类的构造方法init必须使用requried关键字修饰

示例代码:

class ClazzA: NSObject, NSCopying {

    var memberA = 0   

    //必须使用required关键字修饰
    required override init() {

    }

    ///实现copyWithZone方法
    func copyWithZone(zone: NSZone) -> AnyObject {
        let theCopyObj = self.dynamicType.init()
        theCopyObj.memberA = self.memberA

        return theCopyObj
    }
}

ClazzA类直接继承NSObject,并且也实现了NSCopyingcopyWithZone方法,所以调用copy方法来复制ClazzA对象是没有问题的。但是考虑到ClazzA可以作为其他类的基类,那么第12行代码let theCopyObj = self.dynamicType.init()就不能替换成let theCopyObj = ClazzA(),否则子类中强制类型转换时将发生异常。应该生成其子类型的对象,使用dynamicType来实例化子类型对象,dynamicType代表动态类型,即其最顶层的子类类型。

假如此时ClazzA再派生一个子类ClazzB,使用copy方法来复制实例对象。可以先重载copyWithZone,然后再调用父类的copyWithZone来生成对象,最后对新复制的对象进行赋值,这点很重要,贴上代码一看就懂:

class ClazzB: ClazzA {

    var memberB = 1

    ///重载copyWithZone
    override func copyWithZone(zone: NSZone) -> AnyObject {
        let theCopyObj = super.copyWithZone(zone) as! ClazzB
        theCopyObj.memberB = self.memberB

        return theCopyObj
    }
}

相关文章

  • Copy

    在swift中,NSObject的子类可以使用copy方法来复制实例对象,做法如下: 子类必须声明并实现NSCop...

  • Swift中使用copy方法来复制对象

    在swift中,NSObject的子类可以使用copy方法来复制实例对象,做法如下: 子类必须声明并实现NSCop...

  • 关于Python的浅复制和深复制

    浅复制使用copy.copy()函数,深复制使用copy.deepcopy()函数 创建的浅副本不会克隆子对象,副...

  • iOS开发--拷贝及单例模式

    1.Copy的使用 如何使用copy功能一个对象可以调用copy或mutableCopy方法来创建一个副本对象co...

  • Copy 和 mutableCopy

    如何使用copy功能? 一个对象可以调用copy或mutableCopy方法来创建一个副本对象。 copy:创建的...

  • iOS-基础篇(深拷贝和浅拷贝)

    浅拷贝 “浅拷贝仅仅是把对象的引用复制,或者说对象的指针“ 不是所有对象都能使用copy ,使用了copy必须遵守...

  • 关于Copy

    关于Copy 指针复制 对象复制 The exact meaning of “copy” can vary fro...

  • 写时复制

    写时复制 在swift中,像Array、Dictionary、Set等集合类型都是通过写时复制(copy-on-w...

  • Python中的浅拷贝和深拷贝

    浅拷贝 赋值 和 copy.copy() Python中的浅拷贝分为直接赋值和使用copy模块的copy方法来进行...

  • 深复制与浅复制

    对非集合类对象的copy操作 在非集合类对象中:对 immutable 对象进行 copy 操作,是指针复制,mu...

网友评论

    本文标题:Swift中使用copy方法来复制对象

    本文链接:https://www.haomeiwen.com/subject/rhzcyttx.html