2015-05-26 28 views
6

ho questa riga di codice, e voglio estrarre il "titolo" chiave:Non può indicizzare un valore di un tipo ANYOBJECT, a Swift

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

Tuttavia non lo lascerà compilare, e se ottengo questo messaggio di errore in rosso:

non può indicizzare un valore di un tipo ANYOBJECT con un indice di tipo String

Quando mostrare il contenuto della jParams nel registro con println(jParams) Ottengo il seguente contenuto:

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

Sono nuovo di Swift, quindi non conosco i dettagli della gestione JSON per affrontare questo tipo di problemi. Cosa potrebbe esserci di sbagliato?

//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

Come viene definito jParams? Che tipo è? –

+0

Ciao @MarcosCrispino Ho aggiunto un pezzo di codice alla risposta a riguardo. – Josh

risposta

11

Nella tua modifica sembra che tu stia utilizzando SwiftyJSON.

Se questo è davvero il caso, si può aiutare il compilatore di sapere cosa c'è nel dizionario utilizzando dictionaryValue proprietà di SwiftyJSON:

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

allora si dovrebbe essere in grado di accedere ai valori senza downcasting:

let title = jParams["title"] 

perché SwiftyJSON avrà inferito il tipo giusto per i valori.

+0

Questa è la risposta corretta e dovrebbe essere contrassegnata così. Inoltre, se vuoi ancora un dizionario opzionale, puoi usare la proprietà 'dictionary'. – Ralfonso

+0

Funziona come un incantesimo! Stavo davvero usando SwiftyJSON, ".dictionaryValue" era la chiave, grazie. – Josh

Problemi correlati