我有一个自定义类,我为其编写了一个相等/不相等的函数测试。我试图测试我修改的对象是否等于原始对象,但每当我修改第二个对象时,原始对象似乎也被修改了。下面是一些示例代码(您可以在 Playground 中运行它):
// Custom class
class MyClass {
var foo: Bool = false
static func ==(a: MyClass, b: MyClass) -> Bool {
return (a.foo == b.foo)
}
static func !=(a: MyClass, b: MyClass) -> Bool {
return !(a==b)
}
required init() {
// do nothing
}
}
let originalObj: MyClass = MyClass()
var tempObj: MyClass = MyClass()
tempObj = originalObj
tempObj.foo = true
print(originalObj.foo) // Output: "true" (?!?!)
print(tempObj == originalObj) // Output: "true" (?!?!)
为什么更改 tempObj
的值会更改 originalObj
的值,我该如何防止这种行为?
最佳答案
Classes
在 swift 中是 Reference Types
而 Structs
是 Value Types
。有两种方法可以实现你想要的。您可以使用 struct
而不是 class
或为此类编写一个 copy
方法并使用该方法。像这样
class MyClass {
var foo: Bool = false
static func ==(a: MyClass, b: MyClass) -> Bool {
return (a.foo == b.foo)
}
static func !=(a: MyClass, b: MyClass) -> Bool {
return !(a==b)
}
required init() {
// do nothing
}
func copy() -> MyClass {
let temp = MyClass()
temp.foo = foo
return temp
}
}
let originalObj: MyClass = MyClass()
var tempObj: MyClass = originalObj.copy()
关于swift - 通过引用传递的自定义 swift 类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54015842/