Sobes.tech
Back to questions
Junior — Middle
77

В чем заключается связь между протоколами Hashable и Equatable в языке Swift?

Companies where asked
Разумные решенияРазумные решения

Answer from AI

sobes.tech AI

В Swift протоколы Equatable и Hashable тесно связаны, поскольку Hashable наследуется от Equatable.

  • Equatable требует реализации оператора равенства ==, чтобы сравнивать два экземпляра на равенство.
  • Hashable расширяет Equatable и требует реализации свойства hashValue (или метода hash(into:)), которое возвращает хеш-код объекта.

Связь в том, что для вычисления хеш-кода объекта необходимо уметь сравнивать объекты на равенство, чтобы корректно работать с коллекциями, основанными на хешах (например, Set или Dictionary).

Пример:

struct Person: Hashable {
    var id: Int
    var name: String

    static func == (lhs: Person, rhs: Person) -> Bool {
        return lhs.id == rhs.id
    }

    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
    }
}

Здесь Person соответствует Equatable и Hashable, что позволяет использовать его в хеш-таблицах.