2015-05-26 14 views
6

mam ten wiersz kodu, a chcę, aby wyodrębnić „tytuł” ​​klucz:Nie można indeks wartość typu AnyObject w Swift

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

Jednak to nie pozwala mi skompilować, a jeśli dostanę ten komunikat o błędzie na czerwono:

nie można indeks wartość typu AnyObject z indeksem typu String

Kiedy pokazać zawartość jParams w dzienniku z println(jParams) Mam następującą treść:

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

Jestem nowy Swift więc nie jestem zaznajomiony ze szczegółami obsługi JSON do czynienia z tego typu problemami. Co może być nie tak?

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

Jak zdefiniowano jParams? Jaki to typ? –

+0

Witam @MarcosCrispino Dodałem fragment kodu do odpowiedzi na ten temat. – Josh

Odpowiedz

11

W Twojej edycji wygląda na to, że używasz SwiftyJSON.

Jeśli tak jest w istocie, można pomóc kompilator wiedzieć, co jest w słowniku za pomocą SwiftyJSON za dictionaryValue właściwość:

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

to powinieneś być w stanie uzyskać dostęp do wartości bez rzutowanie w dół:

let title = jParams["title"] 

ponieważ SwiftyJSON wywnioskuje odpowiedni typ dla wartości.

+0

To jest poprawna odpowiedź i powinna być oznaczona tak. Dodatkowo, jeśli nadal chcesz używać opcjonalnego słownika, możesz użyć właściwości 'dictionary'. – Ralfonso

+0

Działa jak urok! Rzeczywiście używałem SwiftyJSON, ".dictionaryValue" było kluczem, dziękuję. – Josh