web-dev-qa-db-ja.com

Swiftエラー:メンバー 'subscript'へのあいまいな参照

私はコーディングを始めたばかりで、アイデアを得るためにオープンソースプロジェクトを選びました。

エラーが発生しています:

メンバー '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

    }
}
31
jonasdickel

picturesのタイプを明示的に指定するだけです。

代わりに:

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

書く:

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

私にとっての答えは、私がキャストした配列のタイプを具体的に述べることでした:

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

「Pictures」は有効な添え字ではないことを意味します。 picturesという名前の定数を作成していて、selectedRestaraunt["Pictures"]の値を割り当ててからNSArrayとしてキャストしようとしているようです。 selectedrestarauntがすでに配列である場合、selectedRestarauntの後の[]括弧内にあるものは、selectedRestaraunt配列のインデックスを参照する整数値である必要があります。明らかに「Pictures」は整数ではなく、文字列です。

配列内の配列にアクセスしようとしている場合。 PicturesselectedRestarauntarray内に格納されている配列であることを意味する場合、selectedRestaraunt[index of Pictures array]を使用してアクセスできます。ここで、[index of pictures array]は、Picutres配列はselectedRestaraunt配列内にあります

2
MikeG

私はこのエラーをやや奇妙な方法で取得することができました。このようなコードがありました:

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

そして、その型を非常に明確に宣言していても、これが配列であることが理解できなかった理由に困惑しました。私は2行に分けて、最終的に役立つエラーメッセージを受け取りました。

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

文字列をUILabelに割り当てようとしましたが、どういうわけか、型推論エンジンが失敗したポイントは下付き文字でした。

したがって、これに困った人への私のアドバイスは、ステートメントを、Swift型推論エンジンがより簡単に消化できる一口サイズのチャンクに分割しようとすることです。

2
bugloaf

EricとEugeneが彼らのコメントで言及したように、selectedRestaurantタイプを知らずにあなたが抱えている問題をレビューすることは不可能です。結局のところ、コンパイラーのあいまいさのエラーが発生しているのです。

しかし、私はMikeGに敬意を払わなければなりません。問題は有効な添え字の1つではありません。たとえば、selectedRestaurantタイプの[NSNumber:AnyObject]がある場合、辞書キーはNSNumberにしかなれないため、明らかにStringは無効になります。

0
nstein