Sobes.tech
Junior — Middle

Swift чӣ гуна фарқияти байни ду объектро дар ҳолати бархӯрди хеш муайян мекунад؟

sobes.tech AI

Ҷавоб аз AI

Дар Swift, усул isEqual(_:) барои муқоиса кардани объектҳо ва ҳал кардани коллизияҳои хеш истифода мешавад. Вақте ки ду объект хеши якхеларо доранд (коллизия), системаи иловагӣ ин усулро даъват мекунад, то санҷад, ки оё объектҳо воқеан баробар ҳастанд.

Раванд:

  1. Хеши объект тавассути hash(into:) ҳисоб карда мешавад.
  2. Агар ду объект хеши якхеларо дошта бошанд, isEqual(_:) барои муқоисаи дақиқ даъват мешавад.
  3. Агар isEqual(_:) true баргардонад, объектҳо баробар ҳисоб мешаванд, дар ғайри ҳол — фарқ мекунанд.

Ин имкон медиҳад, ки бо коллексияҳо мисли Set ё калидҳо дар луғатҳо, ҳатто дар ҳолати коллизияҳои хеш, дуруст кор кунанд.

Масалан дар код:

class Person: Hashable {
    let id: Int
    let name: String

    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
    }

    static func == (lhs: Person, rhs: Person) -> Bool {
        return lhs.id == rhs.id && lhs.name == rhs.name
    }
}

Дар ин ҷо, агар ду объект Person хеши якхеларо дошта бошанд (масалан, якхелаи id), оператори == барои муқоисаи ниҳоӣ даъват мешавад.