私はコーディングを始めたばかりで、アイデアを得るためにオープンソースプロジェクトを選びました。
エラーが発生しています:
メンバー '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
}
}
pictures
のタイプを明示的に指定するだけです。
代わりに:
let pictures = selectedRestaurant["Pictures"] as! NSArray
書く:
let pictures: NSArray = selectedRestaurant["Pictures"] as! NSArray
私にとっての答えは、私がキャストした配列のタイプを具体的に述べることでした:
if let foo = dictionary["bar"] as? [String]
「Pictures」は有効な添え字ではないことを意味します。 pictures
という名前の定数を作成していて、selectedRestaraunt["Pictures"]
の値を割り当ててからNSArray
としてキャストしようとしているようです。 selectedrestaraunt
がすでに配列である場合、selectedRestaraunt
の後の[]
括弧内にあるものは、selectedRestaraunt
配列のインデックスを参照する整数値である必要があります。明らかに「Pictures」は整数ではなく、文字列です。
配列内の配列にアクセスしようとしている場合。 Pictures
がselectedRestaraunt
array内に格納されている配列であることを意味する場合、selectedRestaraunt[index of Pictures array]
を使用してアクセスできます。ここで、[index of pictures array]
は、Picutres
配列はselectedRestaraunt
配列内にあります
私はこのエラーをやや奇妙な方法で取得することができました。このようなコードがありました:
cell.textLabel = anArrayOfStrings[indexPath.item].uppercased()
そして、その型を非常に明確に宣言していても、これが配列であることが理解できなかった理由に困惑しました。私は2行に分けて、最終的に役立つエラーメッセージを受け取りました。
let name = anArrayOfStrings[indexPath.item].uppercased()
cell.textLabel = name
文字列をUILabelに割り当てようとしましたが、どういうわけか、型推論エンジンが失敗したポイントは下付き文字でした。
したがって、これに困った人への私のアドバイスは、ステートメントを、Swift型推論エンジンがより簡単に消化できる一口サイズのチャンクに分割しようとすることです。
EricとEugeneが彼らのコメントで言及したように、selectedRestaurant
タイプを知らずにあなたが抱えている問題をレビューすることは不可能です。結局のところ、コンパイラーのあいまいさのエラーが発生しているのです。
しかし、私はMikeGに敬意を払わなければなりません。問題は有効な添え字の1つではありません。たとえば、selectedRestaurant
タイプの[NSNumber:AnyObject]
がある場合、辞書キーはNSNumberにしかなれないため、明らかにStringは無効になります。