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 meetodihash(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.