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 аст, ки имкон медиҳад онро дар ҷадвалҳои хеш истифода бурдан мумкин аст.