2016-01-25 36 views
21

Sono nuovo per la codifica e ho raccolto alcuni progetti open source per ottenere l'idea. Spero che voi ragazzi potete aiutarmi a risolvere il problemaERRORE SWIFT Riferimento ambiguo al membro "subscript"

let pictures = (selectedRestaurant["Pictures"] as! NSArray) //Here's where i get the 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 

     } 
    } 

} 

} 
+0

Mostraci come viene dichiarato 'selectedRestaurant' e che tipo è. – Moritz

+2

Come viene dichiarato 'selectedRestaurant'? Dal codice snippato che hai postato non conosciamo il tipo e/oi dati archiviati in quella var. Inoltre, il resto del codice, in cui si carica un'immagine dall'URL, non ha alcun indice. –

risposta

1

Significa che "Immagini" non è un indice valido. Sembra che si stia creando una costante denominata pictures e si sta tentando di assegnargli un valore di selectedRestaraunt["Pictures"] e quindi si provi a trasmetterlo come NSArray. Se selectedrestaraunt è già un array, quindi quello che va nelle parentesideve essere un valore intero che farà riferimento a un indice nell'array selectedRestaraunt. Obviosuly "Immagini" non è un numero intero, è una stringa.

Se si sta tentando di accedere a un array all'interno di un array. Il che significa che Pictures è un array memorizzato all'interno della matrice selectedRestaraunt allora si può accedervi utilizzando selectedRestaraunt[index of Pictures array] dove [index of pictures array] è un intero che è uguale al numero di indice in cui la matrice Picutres risiede all'interno della matrice selectedRestaraunt

0

Come menzionato Eric e Eugene nei loro commenti è impossibile riesaminare il problema riscontrato senza conoscere il tipo selectedRestaurant. Dopotutto, ecco perché ottieni l'errore di ambiguità del compilatore.

Devo rispettosamente essere in disaccordo con MikeG però. Il problema non è uno di un indice valido. Si otterrebbe questo tipo di errore, se ad esempio si dispone di un tipo , dove chiaramente String non è più valido poiché la chiave del dizionario può essere solo un NSNumber.

9

Per me la risposta è stata a specificare il tipo di matrice stavo lanciando a:

if let foo = dictionary["bar"] as? [String] 
+1

Questo è ciò di cui avevo bisogno. Grazie! – mondousage

13

Basta specificare esplicitamente ciò che è il tipo di pictures:

Così, invece di:

let pictures = selectedRestaurant["Pictures"] as! NSArray 

scrittura:

let pictures: NSArray = selectedRestaurant["Pictures"] as! NSArray 
0

Sono riuscito a ottenere questo errore in un modo un po strano. Ho avuto il codice come questo:

 cell.textLabel = anArrayOfStrings[indexPath.item].uppercased() 

E io ero perplesso sul motivo per cui non riusciva a capire che si trattava di un array, anche se ho molto chiaramente dichiarato il suo tipo. Ho rotto la linea in due e finalmente ho avuto un messaggio di errore utile:

 let name = anArrayOfStrings[indexPath.item].uppercased() 
     cell.textLabel = name 

stavo cercando di assegnare una stringa a un UILabel, ma in qualche modo il punto in cui il motore di inferenza di tipo fallito ero al pedice.

Quindi il mio consiglio a chiunque per questo è di cercare di suddividere la tua affermazione in pezzi di dimensioni ridotte che il motore di inferenza di tipo Swift può più facilmente digerire.

Problemi correlati