swift - 通过引用传递的自定义 swift 类属性?

标签 swift class properties pass-by-reference

我有一个自定义类,我为其编写了一个相等/不相等的函数测试。我试图测试我修改的对象是否等于原始对象,但每当我修改第二个对象时,原始对象似乎也被修改了。下面是一些示例代码(您可以在 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 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()

关于swift - 通过引用传递的自定义 swift 类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54015842/

相关文章:

ios - 有没有办法检查推送通知设置是否被请求?

class - OWL:定义类的属性和成员对象

c# - 如何从用户控件中删除不必要的属性?

class - 引用 PowerShell 类中另一个属性的属性

delphi - "Cannot create a method for an unnamed component"

ios - 作为自定义 TableView 单元格的 Xib 文件崩溃

ios - 父 View 位于 subview 后面

swift - 如何获取 Pin 图来更改其图像?

python - Python 中的布鲁塞尔芽菜游戏

java - 如何将我的返回方法与这段代码结合起来? (Java、Eclipse)