Wie Vergleiche ich zwei Wörterbücher in Swift?
Gibt es eine einfache Methode zum vergleichen von zwei [String: AnyObject]
Wörterbücher in swift, da es nicht akzeptieren das ==
Betreiber?
Durch den Vergleich von zwei Wörterbüchern, ich meine die Prüfung, dass Sie die gleichen genauen Schlüssel und zu jedem Schlüssel, den Sie haben die gleichen Werte.
InformationsquelleAutor bubakazouba | 2015-09-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie bereits erwähnt von Hot Licks, die Sie verwenden können, NSDictionary Methode isEqualToDictionary (), um zu überprüfen, wenn Sie gleich sind wie folgt:
können Sie auch bei der Implementierung einer benutzerdefinierten operator "==" wie folgt:
Xcode 9 • Swift 4
Aus der docs, Wörterbuch ist nun definiert als struct:
Hier ist, wie würden Sie erstellen ein Wörterbuch der HTTP-Antwort-codes und die zugehörigen Meldungen:
Erstellen ein dictionary mit den kein Schlüssel-Wert-Paare, verwenden Sie ein leeres dictionary-literal ([:]).
Jede Art entspricht, die Hashable-Protokoll kann verwendet werden, als ein Wörterbuch-Key-Typ, einschließlich aller Swift basic-Typen. Sie können Ihre eigenen benutzerdefinierten Typen als dictionary-Schlüssel, indem Sie Sie entsprechen der Hashable-Protokoll.
Brauchen wir nicht zu definieren benutzerdefinierter operator mehr:
Aus der docs:
Testen:
Im obigen Beispiel alle dictionary-Schlüssel und Werte vom gleichen Typ.
Wenn wir versuchen, den Vergleich von zwei Wörterbüchern vom Typ
[String: Any]
Xcode wird sich beschweren, dass Binäre operator == darf nicht angewendet werden, um zwei[String: Any]
Operanden.Aber erweitern wir das
==
operator-Funktionalität die Implementierung eines infix-operator, casting Swift-Wörterbuch NSDictionary und hemmende Wörterbuch-Wert zu Hashable-Protokoll:Testen:
InformationsquelleAutor Leo Dabus
Swift 4 Aktualisieren:
Vergleich der Wörterbücher ist jetzt native! (Docs hier)
Swift 3:
Leo Dabus bereits eine hervorragend geschriebene post mit der akzeptierten Lösung. Jedoch, für mich, fand ich, dass es benötigt einen Schritt mehr voll nutzbar. Wie Sie sehen können von seinem code, die Sie benötigen, um Ihr Wörterbuch zu geben
[AnyHashable: Any]
oder andernfalls bekommen SieBinary operator '==' cannot be applied to two '[String : Any]' operands
, ein Wörterbuch mit Häufig in JSON Deserialisieren für mein Beispiel.Generika ist die Rettung!:
oder in einem anderen Fall hatte ich, mit
[String: Any?]
:Dies kann überall geschehen, so dass ich in der Regel legen Sie es in eine separate Datei, in der Regel so etwas wie
Foundation+utils.swift
oder ähnliches. KIM Swift 3 wird nicht unterstützt Xcode 10.2, so werden Sie wahrscheinlich nicht brauchen diese nicht mehr. :bittersüße Emotionen: 😉InformationsquelleAutor AmitaiB
In Swift 2, wenn beide
Key
undValue
sindEquatable
verwenden, können Sie==
auf das Wörterbuch selbst:Und NSObject ist Gleichsetzbar:
In Ihrem Fall, wenn Sie die Arbeit mit Obj-C-Objekte, die Sie vergleichen wollen mit
isEqual:
können Sie einfach NSObject als Wert geben Sie (anstatt AnyObject).Sie wird wirklich bald der release von iOS9 steht unmittelbar bevor, in wenigen Tagen.
lol jetzt bin ich nun mittels swift 3
InformationsquelleAutor jtbandes
Ohne custom Art im Wert von Wörterbuch, in Swift 2+ können Sie die
==
- operator zum vergleichen von zweiDictionary
um zu überprüfen, ob Sie gleich sind oder nicht.Aber in einigen Fällen mit benutzerdefinierten Typen als
Dictionary
's Wert (wiestruct
), müssen Sie annehmenEquatable
um für diese benutzerdefinierten Typ verwenden==
Betreiber.Ex:
Nun können Sie die
==
operator für den Vergleich von zwei Wörterbüchern:func == <Key: Equatable, Value: Equatable>(lhs: [Key, Value], rhs: [Key, Value])
?Wert Wörterbuch ist nicht Gleichsetzbar geben. Und ich möchte schreiben-Funktion in Swift, die nicht davon abhängen, Kakao Lib geben (wie NSObject, NSDictionary)
InformationsquelleAutor larva