unwrapping unwrap constructors swift member self subscript let

unwrap - SWIFT ERROR Referencia ambigua al miembro ''subíndice''



unwrap optional swift 4 (5)

Como Eric y Eugene mencionaron en sus comentarios, es imposible revisar el problema que está teniendo sin saber el tipo de restaurante selectedRestaurant . Después de todo, es por eso que está recibiendo el error de ambigüedad del compilador.

Sin embargo, tengo que discrepar respetuosamente con MikeG. El problema no es uno de un subíndice válido. [NSNumber:AnyObject] ese tipo de error si, por ejemplo, tuviera un tipo de [NSNumber:AnyObject] selectedRestaurant de [NSNumber:AnyObject] , donde claramente String ya no es válido ya que la clave del diccionario solo podría ser un NSNumber.

Soy nuevo en la codificación y elegí un proyecto de código abierto para obtener la idea. Espero que ustedes puedan ayudarme a arreglar eso

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 } } } }


Me las arreglé para obtener este error de una manera algo extraña. Tuve un código como este:

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

Y me quedé perplejo en cuanto a por qué no podía darse cuenta de que se trataba de una matriz, a pesar de que muy claramente declaré su tipo. Rompí la línea en dos y finalmente recibí un mensaje de error útil:

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

Estaba tratando de asignar una cadena a una UILabel, pero de alguna manera el punto en el que falló el motor de inferencia de tipo estaba en el subíndice.

Por lo tanto, mi consejo para cualquiera que se haya quedado perplejo es que intente dividir su declaración en trozos pequeños que el motor de inferencia de tipo Swift puede digerir más fácilmente.


Para mí, la respuesta fue establecer específicamente el tipo de arreglo al que estaba emitiendo:

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


Significa que "Imágenes" no es un subíndice válido. Parece que está creando una imagen con nombre constante y está tratando de asignarle un valor de selectedRestaraunt["Pictures"] y luego trata de convertirlo en un NSArray . Si selectedrestaraunt ya es una matriz, entonces lo que va entre los corchetes [] después de selectedRestaraunt debe ser un valor entero que se refiera a un índice en la matriz selectedRestaraunt . Obviosuly "Pictures" no es un entero, es una cadena.

Si está intentando acceder a una matriz dentro de una matriz. Lo que significa que Pictures es una matriz almacenada dentro de la matriz de Reestaraunt selectedRestaraunt luego puede acceder a ella utilizando la Picutres matriz [index of pictures array] selectedRestaraunt[index of Pictures array] donde [index of pictures array] es un número entero que es igual al número de índice en el que reside la matriz de Picutres array selectedRestaraunt


Simplemente especifique explícitamente cuál es el tipo de pictures :

Así que en lugar de:

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

Escribir:

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