Swift错误:对成员'subscript'的引用不明确

32

我刚开始学编程,并选择了一些开源项目来了解。

我遇到了以下错误:

成员“subscript”的引用不明确

在下面的代码中:

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

    }
}

请展示 selectedRestaurant 是如何声明的以及它的类型是什么。 - Eric Aya
2
selectedRestaurant 是如何声明的?从您发布的代码片段中,我们不知道您在该变量中存储的类型和/或数据。此外,您加载来自URL的图像的其余代码没有任何下标。 - Yevhen Dubinin
5个回答

24

明确指定pictures的类型:

因此,不要写成:

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

写下:

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

22

对我来说,答案是明确说明我要转换成的数组类型:

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

2
这正是我所需要的。谢谢! - mondousage

2
这意味着" Pictures "不是一个有效的下标。看起来你正在创建一个叫做"pictures"的常量,然后试图将其赋值为selectedRestaraunt["Pictures"]并尝试将其转换为NSArray。如果selectedrestaraunt已经是一个数组,那么在selectedRestaraunt后面的[]括号中应该是一个整数值,它将引用selectedRestaraunt数组中的一个索引。显然,"Pictures"不是一个整数,而是一个字符串。
如果您想访问嵌套数组中的数组,则可以使用selectedRestaraunt [Pictures数组的索引]来访问它,其中[图片数组的索引]是一个整数,等于pictures数组在selectedRestaraunt数组中所在的索引号。

2

我能够以一种有点奇怪的方式获得这个错误。我的代码如下:

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

我曾经陷入困境,不知道为什么它无法识别这是一个数组,尽管我非常明确地声明了它的类型。我将代码分成两行,最终得到了一个有用的错误提示:

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

我试图将一个字符串分配给UILabel,但是某种方式下标引擎失败的点在下标处。

所以,对于任何被这个问题困扰的人,我的建议是尝试将语句分解成小块,使Swift类型推断引擎更容易消化。


0
如Eric和Eugene在他们的评论中提到的那样,如果不知道selectedRestaurant类型,就无法检查您遇到的问题,这就是为什么会出现编译器模糊错误的原因。
尽管如此,我必须尊重地不同意MikeG。问题并不是有效下标的问题。例如,如果您有一个selectedRestaurant类型为[NSNumber:AnyObject]的情况,清楚地,String不再有效,因为字典键只能是NSNumber。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接