Junior
İstifadəçi quruluşu və ya sinfi lüğətdə açar olması üçün nə etmək lazımdır?
sobes.tech Süni İntellekt
AI-dan cavab
Strukturlar və ya sinflər hashlenebilir olmalıdır. Yalnız hashlenebilir tipləri (məsələn, Int, String, Bool) ehtiva edən struktur və ya sinf üçün tərtibçi avtomatik olaraq Hashable protokolunun tətbiqini yaradır. Əgər struktur və ya sinf hashlenməyən tipləri ehtiva edirsə və ya xüsusi hash-ləmə məntiqi tələb olunursa:
Hashableprotokolunu tətbiq etmək lazımdır.hash(into:)metodunda, nümunənin hash-lənə bilən komponentləri təqdim olunan hashera əlavə edilməlidir.
struct User: Hashable {
let id: UUID // UUID standart olaraq Hashable
let name: String // String standart olaraq Hashable
// Əgər bütün xüsusiyyətlər Hashable-dirsə, avtomatik olaraq yaradılır
// func hash(into hasher: inout Hasher) {
// hasher.combine(id)
// hasher.combine(name)
// }
}
class Settings: Hashable {
var difficulty: Int
var volume: Float
init(difficulty: Int, volume: Float) {
self.difficulty = difficulty
self.volume = volume
}
// Sinf üçün əl ilə tətbiq
func hash(into hasher: inout Hasher) {
hasher.combine(difficulty)
hasher.combine(volume)
}
// Həmçinin, `Equatable` tətbiqi də tələb olunur
static func == (lhs: Settings, rhs: Settings) -> Bool {
lhs.difficulty == rhs.difficulty && lhs.volume == rhs.volume
}
}
// İstifadə nümunəsi
let users: [User: String] = [User(id: UUID(), name: "Alice"): "Manager"]
let gameSettings: [Settings: Bool] = [Settings(difficulty: 5, volume: 0.8): true]
Həmçinin, Hashable Equatable-dən irs aldığı üçün, Equatable protokolunu da tətbiq etmək lazımdır. Kompilyator, xüsusiyyətləri də Equatable olan strukturlar üçün Equatable-in avtomatik tətbiqini yaradır. Equatable olmayan xüsusiyyətləri olan sinflər və ya strukturlar (və ya xüsusi müqayisə məntiqi üçün) üçün ==-in əl ilə tətbiqi tələb olunur.