Junior — Middle
Sinf obyekti lug'atda kalit sifatida foydalanilishi uchun nima ta'minlanishi kerak?
sobes.tech AI
AIdan javob
Klassa obyekti lug‘atga kalit sifatida foydalanish uchun (masalan, Swift Dictionary yoki NSDictionary), quyidagilarni ta'minlash kerak:
-
Hashlanish imkoniyati — obyektda to‘g‘ri amalga oshirilgan hash metod bo‘lishi kerak (
hashSwiftda,hashValueObjective-Cda), shunda lug‘at kalitni tez topa oladi. -
Tenglikni solishtirish — obyektda to‘g‘ri amalga oshirilgan taqqoslash metodi (
EquatableSwiftda,isEqual:Objective-Cda) bo‘lishi kerak, shunda lug‘at ikki kalit tengligini aniqlay oladi.
Swiftda bu shartlar uchun, klass Hashable va Equatable protokollariga mos kelishi kerak. Masalan:
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"
Agar bu metodlar to‘g‘ri amalga oshirilmasa, obyekt lug‘atda kalit sifatida ishlatilmaydi.