2015-05-26 8 views
6

Ich habe diese Zeile Code, und ich möchte den „Titel“ Schlüssel extrahieren:kann kein Wert eines Typs ANYOBJECT tiefgestellt, in Swift

var title = jParams["title"] as! String 

aber es wird nicht lassen Sie mich kompilieren, und wenn ich diese Fehlermeldung in rot:

kann keinen Wert eines Typ ANYOBJECT mit einem Index vom Typ String

sUBSCRIPT Wenn der Inhalt von jParams im Protokoll zeigt mit println(jParams) Ich erhalte den folgenden Inhalt:

INCOMING LIST PARAMETERS (jParameters) 
Optional({ 
    title = "Example List"; 
    values =  (
       { 
      id = 1; 
      name = "Line 1"; 
     }, 
       { 
      id = 2; 
      name = "Line 2"; 
     }, 
       { 
      id = 3; 
      name = "Line 3"; 
     } 
    ); 
}) 

Ich bin neu in Swift so bin ich nicht vertraut mit den Details von JSON Umgang mit dieser Art von Problemen zu befassen. Was könnte falsch sein?

//jParams comes from a JSON server response 
var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil) 
      if data != nil { 
       var jdata = JSON(data: data!) 
       var jParams=jdata["responseData"]["extraData"]["params"] 
+0

Wie ist jParams definiert? Welcher Typ ist es? –

+0

Hallo @MarcosCrispino Ich habe der Antwort ein Stück Code hinzugefügt. – Josh

Antwort

11

In Ihrer Bearbeitung sieht es so aus, als würden Sie SwiftyJSON verwenden.

Wenn das tatsächlich der Fall ist, können Sie die Compiler helfen zu wissen, was im Wörterbuch ist von SwiftyJSON der dictionaryValue Eigenschaft mit:

let jParams = jdata["responseData"]["extraData"]["params"].dictionaryValue 

Dann sollten Sie in der Lage sein, Ihre Werte zugreifen, ohne Downcasting:

let title = jParams["title"] 

weil SwiftyJSON den richtigen Typ für die Werte abgeleitet haben wird.

+0

Dies ist die richtige Antwort und sollte so markiert werden. Wenn Sie weiterhin ein optionales Dictionary verwenden möchten, können Sie die Eigenschaft 'dictionary' verwenden. – Ralfonso

+0

Funktioniert wie Charme! Ich benutzte tatsächlich SwiftyJSON, ".dictionaryValue" war der Schlüssel, danke. – Josh