Sobes.tech
Junior — Middle

Mi a kapcsolat a Hashable és az Equatable protokollok között a Swift nyelvben?

sobes.tech MI

Válasz az MI-től

Swiftben az Equatable és Hashable protokollok szorosan összefüggnek, mivel a Hashable az Equatable-ból öröklődik.

  • Equatable megköveteli az == egyenlőség operátor implementálását, hogy két példányt össze lehessen hasonlítani egyenlőség szempontjából.
  • Hashable kiterjeszti az Equatable-t, és megköveteli a hashValue (vagy a hash(into:)) tulajdonság implementálását, amely visszaadja az objektum hash-kódját.

A kapcsolat abban áll, hogy az objektum hash-kódjának kiszámításához szükség van az objektumok egyenlőség szerinti összehasonlítására, hogy helyesen működjenek a hash-alapú gyűjtemények (például Set vagy Dictionary).

Példa:

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)
    }
}

Itt a Person megfelel az Equatable és Hashable protokolloknak, lehetővé téve, hogy hash-táblákban használjuk.