Ответ
Оператор идентичности (===) используется для проверки, ссылаются ли две переменные или константы на один и тот же экземпляр класса в памяти.
Пример использования:
class User {
let id: String
init(id: String) { self.id = id }
}
// Создаем экземпляры
let user1 = User(id: "123")
let user2 = user1 // Копируется ссылка
let user3 = User(id: "123") // Новый экземпляр
// Сравнение по ссылке:
print(user1 === user2) // true - одна и та же ссылка
print(user1 === user3) // false - разные экземпляры
print(user1 !== user3) // true - разные экземпляры
Ключевые моменты:
- Работает только с классами (reference types)
- Не работает со структурами и перечислениями (value types), так как они всегда копируются
- Отличается от оператора равенства (
==) который сравнивает значения
Когда использовать ===:
- Проверка, является ли объект
singleton - Отслеживание конкретного экземпляра в делегатах или наблюдателях
- Оптимизация при работе с тяжелыми объектами
Для структур используйте сравнение значений:
struct Point {
let x, y: Int
}
let p1 = Point(x: 10, y: 20)
let p2 = Point(x: 10, y: 20)
// Для структур нужно реализовать Equatable
// или сравнивать свойства напрямую
print(p1.x == p2.x && p1.y == p2.y) // true