J'ai ce code:
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 ... }
Sur la dernière ligne, je reçois cette erreur:
Utilisation ambiguë de l'indice
Comment puis-je résoudre ça?
Ce code a fonctionné pendant un certain time, mais avec la mise à niveau vers xcode 7.1, il s'est cassé et a cessé de fonctionner.
Vous devez dire au compilateur quel est l'object intermédiaire dans la ligne
let obj = jsonResult["levels"]![i] as! NSDictionary
Après l'instruction jsonResult["levels"]!
le compilateur ne sait pas quel genre d'object il a affaire. Vous devez dire que c'est un NSArray
ou autre chose:
let obj = (jsonResult["levels"] as! NSArray)[i] as! NSDictionary
Bien sûr, vous devriez également vous assurer que vous pouvez réellement faire tout ce casting et que les objects dans le json sont vraiment du type attendu.
Même un peu plus court en utilisant un seul cast en NSDictionary
directement vers un tableau de NSDictionary
:
let obj = (jsonResult["levels"] as! [NSDictionary])[i]
Le raisonnement rest le même: vous dites au compilateur de quel type jsonResult["levels"]
. Il est supposé être un tableau contenant des NSDictionary
.
Dans la nouvelle mise à jour de Swift. Vous devriez get votre valeur avec la objectForKey("yourKey")
plutôt que ["yourKey"]
. Dans ton cas,
let obj = jsonResult.objectForKey("levels")![i] as! NSDictionary