Разница между == и === в Swift
Всем привет! Подскажите, пожалуйста, в чем принципиальная разница между операторами == и === в Swift? Я понимаю, что оба используются для сравнения, но когда я пытаюсь сравнить два экземпляра класса, результат отличается от ожидаемого.
Вот пример кода, который меня смущает:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
let person1 = Person(name: "Alice")
let person2 = Person(name: "Alice")
print(person1 == person2) // Ошибка компиляции: Binary operator '==' cannot be applied to two 'Person' operands
print(person1 === person2) // false
let person3 = person1
print(person1 === person3) // trueЯ ожидал, что person1 == person2 вернет true, так как у них одинаковые имена, но получил ошибку компиляции. При этом === работает, но возвращает false, хотя объекты выглядят одинаково. Я уже пробовал:
- Добавить протокол
Equatableвручную — тогда==заработал, но не уверен, правильно ли я его реализовал. - Почитать документацию Apple, но там написано сложно.
Можете объяснить на пальцах, когда какой оператор использовать и почему == требует дополнительной настройки для классов, а для структур работает из коробки? Заранее спасибо!