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), ще бъде извикан операторът == за окончателно сравнение.