我可以通过分配结构变量来在Swift中制作自定义对象的“副本”吗?

时间:2018-02-22 22:26:58

标签: swift struct

我有一个我要复制的自定义类,但由于各种原因而将其声明为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
...

谢谢!

1 个答案:

答案 0 :(得分:0)

StringDateInt都是结构,在分配时复制。它们是直接存储的,而不是间接存储的,因此您永远不会让两个Int指向同一个Int(导致别名/状态共享),因为Int isn'间接引用。

我会将它包装在初始化器或实例方法(.deepCopy()中,也许?)

您需要注意的是对象(类的实例)的意外别名,这些对象被保留为引用(引用被复制,而不是它们指向的对象)。在这种情况下,您必须在所有可传递引用对象上递归调用deepCopy