我有一个想要复制的自定义类,但由于各种原因将其声明为 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
...
谢谢!
最佳答案
String
、Date
和 Int
都是结构体,在赋值时复制。它们是直接存储的,而不是通过引用间接存储的,因此您永远无法让两个 Int 指向同一个 Int(导致别名/状态共享),因为 Int
未间接引用。
我会将其包装在初始化程序或实例方法中(也许.deepCopy()
?)
您必须注意的是对象(类的实例)的意外别名,这些对象被引用(复制引用,而不是它们指向的对象)。在这种情况下,您必须对所有传递引用的对象递归调用 deepCopy
。
关于swift - 我可以通过分配结构体变量来创建 Swift 中自定义对象的 "copy"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48938244/