Je suis novice en codage et j'ai choisi un projet open source pour avoir l'idée.
Je reçois l'erreur:
Référence ambiguë au membre 'indice'
dans le code ci-dessous:
let pictures = ( selectedRestaurant["Pictures"] as! NSArray ) // Error
let picture = ( pictures[zoomedPhotoIndex] as! NSDictionary )
let pictureURL = picture["url"] as! String
let imageURL = NSURL(string: pictureURL)
let urlRequest = NSURLRequest(URL: imageURL!)
NSURLConnection.sendAsynchronousRequest(urlRequest, queue: NSOperationQueue.mainQueue()) {
response, data, error in
if error == nil && data != nil {
self.imageView.image = UIImage(data: data!)
self.imageView.contentMode = UIViewContentMode.ScaleAspectFit
}
}
Spécifiez simplement quel est le type de pictures
:
Donc au lieu de:
let pictures = selectedRestaurant["Pictures"] as! NSArray
Écrire:
let pictures: NSArray = selectedRestaurant["Pictures"] as! NSArray
Pour moi, la réponse a été d’indiquer spécifiquement le type de tableau sur lequel j’ai lancé:
if let foo = dictionary["bar"] as? [String]
Cela signifie que "Images" n'est pas un indice valide. On dirait que vous créez une constante nommée pictures
et que vous essayez de lui attribuer la valeur selectedRestaraunt["Pictures"]
et ensuite essayer de le convertir en NSArray
. Si selectedrestaraunt
est déjà un tableau, que se passe-t-il dans le []
Les crochets après selectedRestaraunt
doivent être une valeur entière qui fera référence à un index dans le tableau selectedRestaraunt
. Evidemment, "Pictures" n'est pas un entier, c'est une chaîne.
Si vous essayez d'accéder à un tableau au sein d'un tableau. Ce qui signifie que Pictures
est un tableau stocké dans le tableau selectedRestaraunt
alors vous pouvez y accéder en utilisant selectedRestaraunt[index of Pictures array]
où [index of pictures array]
est un entier égal au numéro d'index dans lequel le tableau Picutres
se trouve dans le tableau selectedRestaraunt
J'ai réussi à obtenir cette erreur d'une manière un peu étrange. J'ai eu le code comme ceci:
cell.textLabel = anArrayOfStrings[indexPath.item].uppercased()
Et je ne comprenais pas pourquoi il ne pouvait pas comprendre qu'il s'agissait d'un tableau, même si j'ai clairement déclaré son type. J'ai cassé la ligne en deux et j'ai finalement reçu un message d'erreur utile:
let name = anArrayOfStrings[indexPath.item].uppercased()
cell.textLabel = name
J'essayais d'assigner une chaîne à un UILabel, mais le moteur d'inférence de type a échoué en un point quelconque.
Je conseille donc à tous ceux qui souffrent de ce problème d'essayer de diviser votre déclaration en petits morceaux que le moteur d'inférence de type Swift peut digérer plus facilement.
Comme Eric et Eugene l'ont mentionné dans leurs commentaires, il est impossible d'examiner le problème que vous rencontrez sans connaître le type selectedRestaurant
. C'est après tout pourquoi vous obtenez l'erreur d'ambiguïté du compilateur.
Je suis respectueusement en désaccord avec MikeG cependant. Le problème ne fait pas partie d'un indice valide. Vous obtiendrez ce genre d'erreur si, par exemple, vous aviez un type selectedRestaurant
de [NSNumber:AnyObject]
, où clairement String n'est plus valide car la clé du dictionnaire ne peut être qu'un NSNumber.