2016-12-02 2 views
0

Wie fügen Sie einen neuen Schlüssel zu einem Dictionary in Swift hinzu? Ich erhalte eine Fehlermeldung:Wie fügen Sie einen neuen Schlüssel zu einem Wörterbuch in swift hinzu?

Diese Klasse ist nicht Schlüsselwert Codierung-konform für den Schlüssel-Adresse ...

Hier ist mein Code:

let user = [ 
    "id": id, 
    "name" : name 
] 

if customer.address != nil { 
    let address = [ 
     "street": customer.address.street, 
     "zip": customer.address.zip, 
    ] 

    user.setValue(address, forKey: "address") 
} 

AKTUALISIERT Code:

var user = [ 
      "id": customer.id, 
      "name" : customer.fullName!, 
      "position" : customer.position != nil ? customer.position! : "" 
     ] 

     if customer.address != nil { 
      let address = [ 
       "street": customer.address!.street, 
       "zip": customer.address!.zip 
      ] 

      user["address"] = address 
     } 
+1

Mögliche Duplikat [Warum kann ich nicht SetValue für Wörterbuch benutzen?] (Http://stackoverflow.com/questions/26313847/why-i-can-not-use- setvalue-for-dictionary) –

+2

Warum verwenden Sie überhaupt ein Wörterbuch? Sie sollten Datenmodelle für solche Daten erstellen. Es ist viel besser (und einfacher ... und sicherer), eine Struktur für Ihre Daten zu haben, deren Eigenschaften Sie festlegen können. Swift ist kein JavaScript. Hör auf, es so zu behandeln, wie es ist. – Fogmeister

+0

@Fogmeister Ich habe Datenmodelle, aber das ist, bevor ich eine Anfrage an meinen Server senden. – Prabhu

Antwort

2

Das Problem ist, dass Sie versuchen, verschiedene Typenwerte im Wörterbuch hinzuzufügen. Wenn Sie andere Arten von Werten hinzufügen möchten, verwenden Sie Any. Any kann eine Instanz eines beliebigen Typs darstellen.

zum Beispiel:

var user: [String: Any] = [ 
    "id": "dd", 
    "name" : "ddd" 
] 

let address = ["street": "ss","zip": "124115"] 

user["address"] = address 
+1

Ja, das war es. – Prabhu

1

Ändern Sie einfach Benutzer Dictionary Deklaration zu var anstelle von Konstante und verwenden Sie dann subscript, um einen neuen Wert mit dem Schlüssel hinzuzufügen.

var user: [String: AnyObject] = [ 
    "id": id, 
    "name" : name 
] 
user["address"] = address 
+0

Ich erhalte einen Fehler "kann nicht durch tiefgestellt zuweisen: Tiefgestellt wird nur bekommen" – Prabhu

+0

@ Prabhu sicher sein, dass das 'user' Wörterbuch als' var' deklariert wird (wie Nirav D schrieb) und nicht "lassen" –

+0

Ja, ich änderte es in var. – Prabhu

Verwandte Themen