我是编码的新手,并选择了一些开源项目来实现这个想法。
我收到了错误:
对成员'下标'的模糊引用
在下面的代码中:
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
}
}
答案 0 :(得分:24)
只需明确指定pictures
的类型:
所以而不是:
let pictures = selectedRestaurant["Pictures"] as! NSArray
写:
let pictures: NSArray = selectedRestaurant["Pictures"] as! NSArray
答案 1 :(得分:21)
对我来说,答案是明确说明我要投射到的数组的类型:
if let foo = dictionary["bar"] as? [String]
答案 2 :(得分:2)
这意味着“图片”不是有效的下标。看起来您正在创建名为pictures
的常量,并且您尝试为其分配值selectedRestaraunt["Pictures"]
,然后尝试将其转换为NSArray
。如果selectedrestaraunt
已经是一个数组,那么[]
之后的selectedRestaraunt
括号中的内容应该是一个整数值,它将引用selectedRestaraunt
数组中的索引。 Obviosuly“Pictures”不是整数,而是一个字符串。
如果您尝试访问阵列中的数组。意味着Pictures
是存储在selectedRestaraunt
数组中的数组,那么您可以使用selectedRestaraunt[index of Pictures array]
来访问它,其中[index of pictures array]
是一个整数,其等于索引号,其中Picutres
数组位于selectedRestaraunt
数组
答案 3 :(得分:2)
我设法以一种有点奇怪的方式得到这个错误。我有这样的代码:
cell.textLabel = anArrayOfStrings[indexPath.item].uppercased()
我很难过为什么它无法弄清楚这是一个数组,尽管我已经非常明确地声明了它的类型。我打破了两行,最后得到了一条有用的错误信息:
let name = anArrayOfStrings[indexPath.item].uppercased()
cell.textLabel = name
我试图将一个字符串分配给UILabel,但不知何故,类型推理引擎失败的位置是下标。
因此,我对任何对此感到困惑的人的建议是试图将你的陈述分解为一口大小的块,以便Swift类型的推理引擎能够更容易地消化。
答案 4 :(得分:0)
正如埃里克和尤金在评论中提到的,如果不知道selectedRestaurant
类型,就无法回顾你所遇到的问题。这就是为什么你得到编译器歧义错误。
我不得不恭敬地不同意MikeG。问题不是有效的下标之一。如果你有一个selectedRestaurant
类型的[NSNumber:AnyObject]
,那么你就会遇到这种错误,因为字典键只能是一个NSNumber,所以字符串不再有效。