Sobes.tech
Junior — Middle

Чӣ хосиятҳо бояд дошта бошад объекте, ки протоколи Hashable-ро иҷро мекунад, то ки онро дар ҷадвалҳои ҳеш истифода бурда тавонем?

sobes.tech AI

Ҷавоб аз AI

Объект, ки реализира протоколи Hashable дар iOS (Swift), бояд хусусиятҳои зеринро дошта бошад:

  1. Мувофиқат бо протоколи Hashable — объект бояд усули hash(into:)-ро иҷро кунад, ки ҳамаи хусусиятҳои муҳим барои ҳашро ба функсияи ҳаш илова мекунад.

  2. Баробарӣ (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 — идентификатори беназири, ки тавассути он ҳаш ва баробарӣ муайян карда мешаванд.