2015-11-08 10 views
5

Ich habe diesen Code:mehrdeutige Verwendung von Index Xcode 7.1

var jsonResult = (try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)) as! NSDictionary 
var count = jsonResult["levels"]!.count as Int 
for var i=0; i<count; ++i { 
    let obj = jsonResult["levels"]![i] as! NSDictionary 
    ... 
} 

In der letzten Zeile ich diesen Fehler erhalte:

Ambiguous use of subscript

Wie kann ich dieses Problem lösen?

Dieser Code hat seit einiger Zeit funktioniert, aber mit dem Upgrade auf xcode 7.1 es brach und funktioniert nicht mehr.

Antwort

19

Sie haben den Compiler zu sagen, was der Vermittler Objekt in der Linie ist

let obj = jsonResult["levels"]![i] as! NSDictionary 

Nach der Aussage jsonResult["levels"]! der Compiler nicht weiß, welche Art von Objekt, das er es zu tun hat. Sie haben ihm zu sagen, dass ein NSArray oder etwas anderes:

let obj = (jsonResult["levels"] as! NSArray)[i] as! NSDictionary 

Natürlich sollten Sie zusätzlich sicher, dass Sie wirklich alles, was Casting tun können, und dass die Objekte in der json sind wirklich von dem erwarteten Typ.


Schon ein wenig kürzer nur ein Guss mit von einem Array von NSDictionary direkt Gießen:

let obj = (jsonResult["levels"] as! [NSDictionary])[i] 

Die Argumentation bleibt das gleiche: Sie sagen dem Compiler, welche Art jsonResult["levels"]. Es soll ein Array sein, das NSDictionary s enthält.

0

In dem neuen Swift-Update. Sie sollten Ihren Wert mit objectForKey("yourKey") Methode statt ["yourKey"] erhalten. In Ihrem Fall

let obj = jsonResult.objectForKey("levels")![i] as! NSDictionary 
Verwandte Themen