在Objective-C中,可以通过以下方式深入复制:
Foo *foo = [[Foo alloc] init]; Foo *foo2 = foo.copy;
如何在Swift深入复制?
深层复制
您的示例不是在StackOverflow中讨论的a deep copy.获取对象的真实深层拷贝通常需要NSKeyedArchiver
快速复制
NSCopying协议是提供对象副本的Objective-C方式,因为一切都是一个指针,并且您需要一种管理任意对象副本的生成方式.对于Swift中的任意对象副本,您可以提供一个方便的初始化器,您可以在其中初始化MyObject另一个MyObject,并在init中将值从旧对象分配给新对象.老实说,在Objective-C中基本上是-copy,除了Objective-C进行防御性复制之外,它通常必须在每个子对象上调用副本.
let object = MyObject() let object2 = MyObject(object)
几乎一切都是值得的.几乎.
然而,在Swift almost everything is pass-by-value(您应该真的点击上述链接),所以NSCopying的需求大大减少.在游乐场尝试一下:
var array = [Int](count: 5,repeatedValue: 0) print(unsafeAddressOf(array),terminator: "") let newArray = array print(unsafeAddressOf(newArray),terminator: "") array[3] = 3 print(array) print(newArray)
你可以看到这个赋值不是指针的一个副本,而是一个新的数组.对于关于Swift与结构和类别相关的非逐代码语义的问题,我建议fabulous blog of Mike Ash进行一个真正精心的讨论.
最后,如果你想听到你需要知道的一切,你可以观看the WWDC 2015 Value Semantics video.每个人都应该看这个视频,它真的清除了在Swift内部处理内存的方式,以及它与Objective-C的区别.