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

通过引用传递的自定义swift类属性?,swift,class,properties,pass-by-reference,Swift,Class,Properties,Pass By Reference,我有一个自定义类,我已经为它编写了相等/不相等函数测试。我试图测试我修改的对象是否与原始对象相等,但每当我修改第二个对象时,原始对象似乎也会被修改。下面是一些示例代码(您可以在操场上运行此代码): 为什么更改tempObj的值会更改originalObj的值,以及如何防止这种行为?swift中的类是引用类型,而结构是值类型。有两种方法可以实现你想要的。您可以使用struct代替class,也可以为此类编写copy方法并使用该方法。像这样的 class MyClass { var foo:

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


为什么更改
tempObj
的值会更改
originalObj
的值,以及如何防止这种行为?

swift中的类是
引用类型
,而
结构是
值类型
。有两种方法可以实现你想要的。您可以使用
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中的
参考类型
,而
结构
值类型
。有两种方法可以实现你想要的。您可以使用
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()

tempObj=originalObj
使两个引用变量指向内存中的同一对象。如果不希望两者相同,请不要这样做。类是引用类型。可以使用诸如结构和枚举之类的值类型。在这种情况下,当您编写tempObj=originalObj时,它实际上会复制对象,因此对originalObj的任何未来更改都不会修改tempObj。
tempObj=originalObj
使两个引用变量都指向内存中的同一对象。如果不希望两者相同,请不要这样做。类是引用类型。可以使用诸如结构和枚举之类的值类型。在这种情况下,当您编写tempObj=originalObj时,它实际上会复制对象,因此将来对originalObj的任何更改都不会修改tempObj。