Sobes.tech
Junior — Middle

Каква е връзката между протоколите Hashable и Equatable в езика Swift?

sobes.tech AI

Отговор от 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, което позволява използването му в хеш таблици.