在Swift中如何做“深度复制”?

前端之家收集整理的这篇文章主要介绍了在Swift中如何做“深度复制”?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在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的区别.

猜你在找的Swift相关文章