我有一个我要复制的自定义类,但由于各种原因而将其声明为Struct并不好。我的问题是,如果我按照以下方式制作“副本”,我是否会有一个全新的对象,其中每个值(字符串,整数等)完全没有引用任何其他值?说:
newObject = Object()
newObject.name = oldObject.name // This is a String
newObject.rank = oldObject.rank // This is an Int
newObject.date = oldObject.date // This is a Date
...
谢谢!
答案 0 :(得分:0)
String
,Date
和Int
都是结构,在分配时复制。它们是直接存储的,而不是间接存储的,因此您永远不会让两个Int
指向同一个Int
(导致别名/状态共享),因为Int
isn'间接引用。
我会将它包装在初始化器或实例方法(.deepCopy()
中,也许?)
您需要注意的是对象(类的实例)的意外别名,这些对象被保留为引用(引用被复制,而不是它们指向的对象)。在这种情况下,您必须在所有可传递引用对象上递归调用deepCopy
。