我有一个结构和一个类:
class FooClass {
var someValue: String = "123"
}
struct TestStruct {
var aValue: Int = 12
var clsValue: FooClass
}
我想要一个用于测试结构的深层副本,但是以下代码也将在变量a:
中更改clsvaluevar a = TestStruct(aValue: 10, clsValue: FooClass())
var b = a
b.clsValue.someValue = "abc"
我知道结构中的类值仅复制为"参考",但是当我分配a为b。
我确实知道C 可以定义复制构造函数或覆盖=操作员。剂量Swift支持这样的东西?
复制构造函数不过是使用同一类型的另一个实例的初始化器。只需使用适当的深副本定义您的班级和结构的此类初始化。
class FooClass {
var someValue: String = "123"
init() {
}
init(someValue: String) {
self.someValue = someValue
}
// "Copy constructor"
convenience init(_ other: FooClass) {
self.init(someValue: other.someValue)
}
}
struct TestStruct {
var aValue: Int = 12
var clsValue: FooClass
init(aValue: Int, clsValue: FooClass) {
self.aValue = aValue
self.clsValue = FooClass(clsValue) // deep copy
}
// "Copy constructor"
init(_ other: TestStruct) {
self.init(aValue: other.aValue, clsValue: other.clsValue)
}
}
var a = TestStruct(aValue: 10, clsValue: FooClass())
var b = TestStruct(a) // create new instance with its deep copy
b.clsValue.someValue = "abc"
print(a.clsValue.someValue) // prints 123