Avatar ·

Разница между == и === в 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, но там написано сложно.

Можете объяснить на пальцах, когда какой оператор использовать и почему == требует дополнительной настройки для классов, а для структур работает из коробки? Заранее спасибо!