Junior — Middle
Каква е връзката между протоколите Hashable и Equatable в езика Swift?
sobes.tech AI
Отговор от AI
В Swift протоколите Equatable и Hashable са тясно свързани, тъй като Hashable наследява от Equatable.
- Equatable изисква реализирането на оператора за равенство
==, за да сравнява два екземпляра за равенство. - Hashable разширява Equatable и изисква реализирането на свойството
hashValue(или методаhash(into:)), който връща хеш кода на обекта.
Връзката е, че за изчисляване на хеш кода на обекта е необходимо да можем да сравняваме обектите за равенство, за да работят правилно колекциите, базирани на хешове (например, Set или Dictionary).
Пример:
struct Person: Hashable {
var id: Int
var name: String
static func == (lhs: Person, rhs: Person) -> Bool {
return lhs.id == rhs.id
}
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
}
Тук Person съответства на Equatable и Hashable, което позволява използването му в хеш таблици.