Junior — Middle
Какво трябва да се осигури, за да се използва обект от клас като ключ в речник?
sobes.tech AI
Отговор от AI
За да използвате обект от клас като ключ в речник (например, в Swift Dictionary или NSDictionary), трябва да осигурите:
-
Хешируемост — обектът трябва да има правилно реализиран метод за хеширане (
hashв Swift,hashValueв Objective-C), за да може речникът бързо да намери ключа. -
Сравняемост за равенство — обектът трябва правилно да реализира метода за сравнение (
Equatableв Swift,isEqual:в Objective-C), за да може речникът да определи дали два ключа са равни.
В Swift това означава, че класът трябва да съответства на протоколите Hashable и Equatable. Например:
class Person: Hashable {
var id: Int
var name: String
init(id: Int, name: String) {
self.id = id
self.name = name
}
static func == (lhs: Person, rhs: Person) -> Bool {
return lhs.id == rhs.id
}
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
}
var dict: [Person: String] = [:]
dict[Person(id: 1, name: "Alice")] = "Developer"
Без правилна реализация на тези методи обектът няма да може да бъде ключ в речник.