В чем разница между операторами == и === в Swift?

«В чем разница между операторами == и === в Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Операторы решают разные задачи сравнения:

  • == (Оператор равенства)

    • Сравнивает значения на эквивалентность.
    • Требует соответствия типов сравниваемых операндов протоколу 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 — обе ссылки указывают на один объект

Итог: Используйте == для сравнения по значению, === — чтобы проверить, являются ли две переменные ссылками на один экземпляр класса.