Dictionary — Swift'te "anahtar-değer" çiftlerini saklayan bir ilişkilendirilmiş konteynırdır. Anahtarların, öğelere benzersiz ve sabit süreli erişim sağlamak için Hashable ve Equatable protokollerini uygulaması zorunludur.
Özellikler:
Hashable ve Equatable açıkça uygulanmalıdır.Örnek:
struct EmployeeID: Hashable { let company: String let id: Int } var employees: [EmployeeID: String] = [ EmployeeID(company: "A", id: 1): "Alice", EmployeeID(company: "B", id: 2): "Bob" ] let empName = employees[EmployeeID(company: "A", id: 1)] // Alice
Dictionary, Hashable'ı uygulamayan bir kullanıcı türünü anahtar olarak alabilir mi?
— Yanlış. Eğer tür Hashable'ı uygulamıyorsa, anahtar olarak kullanılamaz. Kullanım denemesi derleme hatasına yol açar.
Örnek:
class Foo {} var dict: [Foo: Int] = [:] // Hata: Foo, Hashable'ı uygulamıyor
Hikaye
Bir projede, diziler içeren yapıların anahtarı olarak Dictionary kullandık. Yapı Hashable protokolüne uymuyordu, bu nedenle Dictionary çalışmadı. Çözüm: Tüm alanları, diziler dahil, dikkate alan özel bir hashValue uygulamak.
Hikaye
Anahtar olarak NSObject sınıf alt nesnelerini kullanırken nesne adresine güveniyorduk. Kodun bir kısmını yapılar için yeniden yazdıktan sonra veriler uyuşmamaya başladı: yapıların hash değerleri farklı hesaplanıyordu, bu da veri erişim kaybına yol açıyordu.
Hikaye
Karmaşık anahtarla bir sözlük saklarken Equatable'ı uygulamayı unuttuk. Sonuç — aynı parametreye sahip öğeler farklı anahtarlar olarak kabul edildi, bu da kopyalar ve sözlükte arama hatalarına yol açtı.