Junior — Middle
როგორ განსაზღვრავს Swift ობიექტებს შორის განსხვავებას ჰეშის შეჯახების დროს?
sobes.tech AI
პასუხი AI-სგან
Swift-те, isEqual(_:) ыкмасы объекттерди салыштыруу жана хеш кагылышууларын чечүү үчүн колдонулат. Эки объекттин бирдей хеши (кагылышуу) болсо, системасы кошумча бул ыкманы чакырып, объекттер чын эле бирдей экенин текшерет.
Процесс:
- Объекттин хеши
hash(into:)аркылуу эсептелет. - Эки объекттин бирдей хеши болсо, так салыштыруу үчүн
isEqual(_:)чакырылат. - Эгер
isEqual(_:)trueкайтарса, объекттер бирдей деп эсептелет, башкача болсо — айырмаланат.
Бул Set сыяктуу коллекциялар менен же сөздүктүн ачкычтары менен туура иштешин камсыз кылат, even хеш кагылышуулар болсо да.
Мисал:
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), финалдык салыштыруу үчүн == оператору чакырылат.