Utilisation ambiguë de l'indice xcode 7.1

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