Junior — Middle
Swift чӣ гуна фарқияти байни ду объектро дар ҳолати бархӯрди хеш муайян мекунад؟
sobes.tech AI
Ҷавоб аз AI
Дар Swift, усул isEqual(_:) барои муқоиса кардани объектҳо ва ҳал кардани коллизияҳои хеш истифода мешавад. Вақте ки ду объект хеши якхеларо доранд (коллизия), системаи иловагӣ ин усулро даъват мекунад, то санҷад, ки оё объектҳо воқеан баробар ҳастанд.
Раванд:
- Хеши объект тавассути
hash(into:)ҳисоб карда мешавад. - Агар ду объект хеши якхеларо дошта бошанд,
isEqual(_:)барои муқоисаи дақиқ даъват мешавад. - Агар
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), оператори == барои муқоисаи ниҳоӣ даъват мешавад.