Dictionary ist ein assoziativer Container in Swift, der „Schlüssel-Wert“-Paare speichert. Die Schlüssel müssen die Protokolle Hashable und Equatable implementieren, um Einzigartigkeit und konstante Zugriffszeiten auf Elemente sicherzustellen.
Besonderheiten:
Hashable und Equatable explizit implementiert sind.Beispiel:
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
Kann Dictionary einen benutzerdefinierten Typ als Schlüssel akzeptieren, der Hashable nicht implementiert?
— Falsch. Wenn der Typ Hashable nicht implementiert, kann er nicht als Schlüssel verwendet werden. Ein Versuch, dies zu tun, führt zu einem Kompilierungsfehler.
Beispiel:
class Foo {} var dict: [Foo: Int] = [:] // Fehler: Foo implementiert nicht Hashable
Geschichte
In einem Projekt wurden Schlüssel Dictionary basierend auf Structs mit Arrays intern gespeichert. Die Struktur entsprach nicht dem Protokoll Hashable, weshalb Dictionary nicht funktionierte. Lösung: eigene hashValue implementieren, die alle Felder, einschließlich Arrays, berücksichtigt.
Geschichte
Verwendeten NSObject-Unterklassen als Schlüssel, wobei sie sich auf die Objektadresse verließen. Nach der Umstellung eines Teils des Codes auf Strukturen stimmten die Daten nicht mehr überein: Die Hash-Werte der Strukturen wurden anders berechnet, was zu Datenverlust führte.
Geschichte
Beim Speichern eines Dictionaries mit komplexem Schlüssel wurde vergessen, Equatable zu implementieren. Ergebnis: Elemente mit gleichen Parametern wurden als unterschiedliche Schlüssel angesehen, was zu Duplikaten und Fehlern bei der Suche im Dictionary führte.