web-dev-qa-db-fra.com

Swift Erreur: Référence ambiguë au membre "indice"

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

    }
}
31
jonasdickel

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
25
Shaked Sayag

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]
21
Scott Fister

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][index of pictures array] est un entier égal au numéro d'index dans lequel le tableau Picutres se trouve dans le tableau selectedRestaraunt

2
MikeG

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.

2
bugloaf

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.

0
nstein