在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的区别. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- appcompat_v7/res/values-v21/themes_base.xml No resource
- ie ajax请求缓存问题
- reactjs – Semantic-UI React:如何在create-react-app项目
- flex_01 java 和 flex 通信
- Mark:Ajax参数中文编码乱码问题
- iphone – WhatsApp如何知道用户是否得到推送通知,即使应用
- 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第二十节
- ansible调用callbacks插件实现结果nosql输出回调
- c# – 如果lambda中的语句用于整个查询
- PostgreSQL日期差异