Ответ
Операторы решают разные задачи сравнения:
-
==(Оператор равенства)- Сравнивает значения на эквивалентность.
- Требует соответствия типов сравниваемых операндов протоколу
Equatable. - Реализуется разработчиком для пользовательских типов.
-
===(Оператор идентичности)- Сравнивает ссылки на экземпляры классов.
- Проверяет, указывают ли две переменные/константы на один и тот же объект в памяти.
- Применим только к экземплярам классов (ссылочным типам).
Практический пример:
class Person: Equatable {
let id: Int
init(id: Int) { self.id = id }
static func == (lhs: Person, rhs: Person) -> Bool {
return lhs.id == rhs.id // Сравниваем значения ID
}
}
let person1 = Person(id: 1)
let person2 = Person(id: 1)
let person3 = person1
print(person1 == person2) // true — значения ID равны (1 == 1)
print(person1 === person2) // false — это разные объекты в памяти
print(person1 === person3) // true — обе ссылки указывают на один объект
Итог: Используйте == для сравнения по значению, === — чтобы проверить, являются ли две переменные ссылками на один экземпляр класса.