2015-04-30 9 views
6

Also versuche ich einige Daten in JSON mit Swift zu analysieren. mein Code unten istNSDictionary in Swift: Kann einen Wert vom Typ 'AnyObject' nicht subskribieren? mit einem Index vom Typ 'Int'

var jsonResult:NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary 

println(jsonResult) 

Der obige Code werde ich versuchen, dann so etwas wie dieses

{ 
count = 100 
subjects = (
     { 
     alt = "....." 
     name = "....." 
     }, 
     { 
     alt = "....." 
     name = "....." 
     }, 

     ...... 
     ) 
} 

Rückkehr alle Fächer mit jsonResult["subjects"] zugreifen zu können, so weit so gut Aber wenn ich versuche, Zugriff auf das einzelne Thema, zum Beispiel jsonResult["subjects"][0], Xcode gibt mir Fehler: Cannot subscript a value of type 'AnyObject?' with an index of type 'Int' Kann mir jemand dabei helfen?

Antwort

7

Wenn Sie ein Wörterbuch wie in jsonResult["subjects"] indizieren, erhalten Sie ein Optional. Sie müssen das Optional auspacken. Da dieses Wörterbuch von JSON kommt, weiß Swift darüber hinaus nicht, welche Art von Option das Objekt enthält: es wird als AnyObject eingegeben - deshalb beschreibt Swift das Optional als AnyObject?. Also erzählst du Swift auch, welche Art von Objekt das wirklich ist - es ist ein Array von Wörterbüchern, und du musst Swift das sagen, oder du wirst es nicht mit [0] tiefstellen können.

Sie können in einem einzigen Schritt sowohl die Dinge tun, wie folgt aus:

if let array = jsonResult["subjects"] as? [[NSObject:AnyObject]] { 
    let result = array[0] 
    // ... 
} 

Wenn Sie sind sehr, sehr sicher dein Acker, können Sie das Abwickeln und das Gießen zwingen, und zu reduzieren, die zu einem Einzelleitung, wie folgt:

let result = (jsonResult["subjects"] as! [[NSObject:AnyObject]])[0] 

Aber ich kann das nicht empfehlen. Es gibt zu viele Möglichkeiten, wie es schief gehen kann.

+0

Vielen Dank, total funktioniert – JSNoob

0

Sie sollten wie versuchen,

var jsonResult:NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary 
let subjhectarry : NSArray = jsonResult["subjects"] as! NSArray 
let yourFirstObj : NSDictionary = subjhectarry[0] as! NSDictionary 

Mai diese Ihnen helfen.

2

Mit Swift 2 mindestens, können Sie mit jsonResult ["Betreff"] als tun! [AnyObject]

let data = try NSJSONSerialization.JSONObjectWithData(textData!, options: NSJSONReadingOptions.AllowFragments) 
let results = data["results"] as! [AnyObject] 
let first = results[0] 
Verwandte Themen