您当前的位置: 首页 >  swift

Swift让数组支持深拷贝

发布时间:2018-11-15 14:59:19 ,浏览量:0

当数组的元素为对象时才考虑深拷贝,如果是结构就没有意义了。

只有数组的对象支持NSCopying协议时,数组才可以支持深拷贝。

有了如上共识,我们可以很快写出Demo来:

首先是测试类:

class Foo:NSCopying{
    func copy(with zone: NSZone? = nil) -> Any {
        let copiedObj = Foo(name: name)
        return copiedObj
    }
    
    var name = "none"
    
    init(name:String) {
        self.name = name
    }
}

然后是数组扩展:

extension Array where Element:NSCopying{
    ///返回元素支持拷贝数组的深拷贝
    public var copy:[Element]{
        return self.map {$0.copy(with: nil) as! Element}
    }
}

最后是测试:

var ary = [Foo]()
ary.append(Foo(name: "bigWang"))
ary.append(Foo(name: "smallWang"))

//var ary_cpy = Array(ary) 浅拷贝!
var ary_cpy = ary.copy		//深拷贝
ary_cpy[0].name = "none"

print("ary 1st name : \(ary[0].name)")
print("ary_cpy 1st name : \(ary_cpy[0].name)")

如你所愿,修改ary中元素,不会对ary_cpy中元素造成影响,这样我们就实现了数组的深拷贝。

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    108253博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0519s