Junior — Middle
Чӣ хосиятҳо бояд дошта бошад объекте, ки протоколи Hashable-ро иҷро мекунад, то ки онро дар ҷадвалҳои ҳеш истифода бурда тавонем?
sobes.tech AI
Ҷавоб аз AI
Объект, ки реализира протоколи Hashable дар iOS (Swift), бояд хусусиятҳои зеринро дошта бошад:
-
Мувофиқат бо протоколи Hashable — объект бояд усули
hash(into:)-ро иҷро кунад, ки ҳамаи хусусиятҳои муҳим барои ҳашро ба функсияи ҳаш илова мекунад. -
Баробарӣ (Equatable) — объектҳое, ки баробар ҳисобида мешаванд (бо истифода аз оператори
==), бояд ҳаши якхела дошта бошанд.
Ин барои истифодаи объект дар ҷадвалҳои ҳаш (масалан, дар Set ё ҳамчун калид дар Dictionary) зарур аст, ки ҳаш ҷойгиршавии унсурро муайян мекунад ва баробарӣ ягонагиро таъмин мекунад.
Маслиҳати иҷроиш:
struct User: Hashable {
var id: Int
var name: String
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
static func == (lhs: User, rhs: User) -> Bool {
return lhs.id == rhs.id
}
}
Ин ҷо, id — идентификатори беназири, ки тавассути он ҳаш ва баробарӣ муайян карда мешаванд.