Swift中的结构可以具有复制构造函数吗?



我有一个结构和一个类:

class FooClass {
    var someValue: String = "123"
}
struct TestStruct {
    var aValue: Int = 12
    var clsValue: FooClass
}

我想要一个用于测试结构的深层副本,但是以下代码也将在变量a:

中更改clsvalue
var 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

最新更新