У меня есть собственный класс, для которого я написал функциональный тест на равенство / не равен. Я пытаюсь проверить, равен ли объект, который я изменил, исходному объекту, но всякий раз, когда я изменяю второй объект, кажется, что исходный объект также изменяется. Вот пример кода (вы можете запустить его на игровой площадке):
// 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
, и как я могу предотвратить это поведение?