2017-12-30 7 views
0

anhängen Ich habe gerade angefangen, sich mit JSON vertraut zu machen. Ich habe ein Klassenobjekt, das ich initialisiere, indem ich ein JSON übergebe. Dieses Objekt hat ein Array, das leer sein kann, und ich muss es auf Wert prüfen. so weit ich versuche:optionale Elemente an ein Array von JSON in Swift

init(json: JSON) { 
    id = json["id"].string 
    type = json["type"].string 
    text = json["text"].string 
    answer = json["answer"].string 
    format = json["format"].string 
    answeredBy = [] 

    if let answeredByjson = json["answeredBy"].array { 
     for (_, userDict) in answeredByjson { 
      if let userDict = userDict as? [String : Any] { 
       answeredBy.append(JSON(User(dictionary: userDict))) 
      } 
     } 
    } 
} 

die Elemente im Array Wörterbücher sind, die verwendet werden müssen, um ein anderes Objekt (Benutzer) zu initialisieren. der Fehler, den ich bekomme, ist:

Ausdruckstyp '[JSON]' ist mehrdeutig ohne mehr Kontext.

Wie kann ich meinen Code aktualisieren?

das ist mein json:

{   
    "answer" : "rachel", 
     "answeredBy" : { 
     "j1K4WXbOFRXfm3srk9oMtZJ8Iop2" : { 
      "email" : "an email", 
      "pictureURL" : "a URL", 
      "uid" : "j1K4WXbOFRXfm3srk9oMtZJ8Iop2", 
      "name" : "a name" 
     }, 
     "vtYlmyerugedizHyOW6TV847Be23" : { 
      "email" : "an email", 
      "pictureURL" : "a URL", 
      "uid" : "vtYlmyerugedizHyOW6TV847Be23", 
      "name" : "Rusty Shakleford" 
     } 
     }, 
     "format" : "field", 
     "id" : "1", 
     "type" : "text", 
     "text" : "In a foot race, Jerry was neither first nor last. Janet beat Jerry, Jerry beat Pat. Charlie was neither first nor last. Charlie beat Rachel. Pat beat Charlie. Who came in last?" 
    } 
+0

Welche Zeile genau ist verursacht den Fehler? Was ist 'JSON' (Ich verweise den Datentyp in Ihrem geposteten Code)? – rmaddy

+0

@rmaddy wahrscheinlich SwiftyJSON –

+0

Entschuldigung, ja. Ich verwende SwiftyJSON – Sente

Antwort

0
if let answeredByjson = json["answeredBy"].array { 
    ... 
} 

erzeugt ein Array [JSON], aber Sie erwarten, dass es [String: JSON] ein Wörterbuch zu erzeugen. Aus diesem Grund erhalten Sie:

Expression Typ '[JSON]' ohne mehr Kontext nicht eindeutig ist

ein Wörterbuch zu erzeugen:

if let answeredByjson = json["answeredBy"].dictionary { 
    ... 
} 

Es erwarten Sie nicht, es zu ein Wörterbuch erstellen [String: JSON] dann macht diese Zeile keinen Sinn

for (_, userDict) in answeredByjson {