Sobes.tech
Junior — Middle

Milline on seos Hashable ja Equatable protokollide vahel Swift keeles?

sobes.tech AI

Vastus AI-lt

Swiftis on protokollid Equatable ja Hashable tihedalt seotud, kuna Hashable pärineb Equatable'ist.

  • Equatable nõuab võrdlusoperaatori == rakendamist, et võrrelda kahte eksemplari võrdluseks.
  • Hashable laiendab Equatable'i ja nõuab omaduse hashValue (või meetodi hash(into:)) rakendamist, mis tagastab objekti hash-koodi.

Seos seisneb selles, et objekti hash-koodi arvutamiseks on vaja võime võrrelda objekte võrdluseks, et hash-põhised kogud (näiteks Set või Dictionary) töötaksid õigesti.

Näide:

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

Siin vastab Person Equatable ja Hashable protokollidele, võimaldades seda kasutada hash-tabelites.