Ich versuche, ein verschachteltes Wörterbuch in Swift zu erstellen, damit ich es später in JSON ändern kann. Ich richte es folgendermaßen ein:
let item: [String: AnyObject] = [
"item": item,
"price": price,
"date": date,
"time": time,
"location": [
"store": "Store name",
"address": "1234 Untitled Dr.",
"city": "City",
"state": "CA",
"zip": "12345"
]
]
print(item)
Wenn ich dies ausführe, ist die Ausgabe wie folgt:
["price": 15.69, "location": {
address = "12350 Carmel MT Road";
city = "City";
state = CA;
store = "Store name";
zip = 12345;
}, "item": item, "date": , "time": ]
Der Positionswert soll verschachtelt seinWörterbuch. Warum gibt es geschweifte Klammern um den Ortsteil? Und warum sind Werte inkonsistent, wenn es Anführungszeichen gibt? Wenn ich versuche, auf Folgendes zuzugreifen:
print(items["location"]!["store"])
Mir wird gesagt, ich:
Ein Wert vom Typ "[[String: AnyObject]]" kann nicht mit einem tiefgestellt werden Index vom Typ "String"
Antworten:
4 für die Antwort № 1Kurze Antwort:
Benutzen [String: Any]
Anstatt von [String: AnyObject]
.
Längere Antwort::
Die Sache ist, Foundation überbrückt Swift-Kerntypen automatisch mit Cocoa. Dies wird gesagt, Swift Dictionary
wird automatisch überbrückt zu NSDictionary
wegen dem AnyObject
kann eine Swift - Struktur nicht in eine AnyObject
und Dictionary
ist eine Struktur.
Das print
Funktionsaufrufe description
Eigentum, das für NSDictionary
s ist mit geschweiften Klammern.
Bei der Angabe Any
Anstatt von AnyObject
Swift setzt den Variablentyp einfach auf Dictionary mit eckigen Klammern description
.
P.S.
Über die subscript
Ich denke, Sie haben ein Array dort, also sollten Sie so etwas wie verwenden items[0]["location"]!["store"]
.