我有一个自定义类,我已经为它编写了一个相等/不相等的函数测试。我试图测试我修改过的对象是否等于原始对象,但是每当我修改第二个对象时,原始对象似乎也会被修改。下面是一些示例代码(您可以在操场上运行此代码):

// 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的值,我如何才能防止这种行为?

最佳答案

swift中的ClassesReference TypesStructsValue 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()

10-06 12:38
查看更多