2016-01-25 5 views
21

私はコーディングに新しく、アイデアを得るためにいくつかのオープンソースプロジェクトを手に入れました。君たちは私がそれは「写真」は、有効な添字ではないことを意味SWIFT ERRORメンバー 'subscript'へのあいまいな参照

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 

     } 
    } 

} 

} 
+0

'selectedRestaurant'がどのように宣言され、どのような型であるかを教えてください。 – Moritz

+2

'selectedRestaurant'はどのように宣言されていますか?投稿したコードから、そのvarに格納されている型および/またはデータがわかりません。また、URLから画像をロードするコードの残りの部分には添字はありません。 –

答えて

1

ことを解決するのに役立ちます願っています。 picturesという名前の定数を作成していて、その値にselectedRestaraunt["Pictures"]を割り当てて、それをNSArrayとしてキャストしようとしているようです。 selectedrestarauntが既に配列の場合は、selectedRestarauntの後に角括弧[]に入るものは、selectedRestaraunt配列のインデックスを参照する整数値でなければなりません。 Obviosuly "Pictures"は整数ではなく、文字列です。

アレイ内のアレイにアクセスしようとしている場合。 Picturesはあなたは[index of pictures array]はエリックとユージンが述べたようにPicutresアレイはselectedRestarauntアレイ

0

内に置かれているインデックス番号に等しい整数であるselectedRestaraunt[index of Pictures array]を使用してそれにアクセスすることができるselectedRestarauntアレイ内に格納された配列であることを意味彼らのコメントでは、selectedRestaurantタイプを知らなくても、あなたが持っている問題を見直すことは不可能です。結局のところ、コンパイラのあいまいなエラーが出るのはなぜですか。

私はマイクGに敬意を表する必要があります。問題は有効な添え字の1つではありません。たとえば、selectedRestaurantタイプが[NSNumber:AnyObject]の場合、そのようなエラーが発生します。この場合、辞書キーはNSNumberのみである可能性があるため、文字列は有効ではなくなります。

9

私にとって答えは、具体的には、私がキャスティングされた配列の型を述べることだった:ちょうどpicturesの種類が何であるかを明示的に指定

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

これも私が必要としていたものです。ありがとう! – mondousage

13

ので、代わりの:

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

書き込み:

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

私は幾分奇妙な方法でこのエラーを得ることができました。私はこのようなコードを持っていた:

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

をそして私は、私は非常に明確にその型を宣言していても、それは、これが配列だったことを見つけ出すことができなかった理由として困惑しました。私は2つのラインを破ったし、最終的に有用なエラーメッセージました:

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

を私はUILabelに文字列を代入しようとしていたが、何とか型推論エンジンが故障した時点では添字でいました。

だから私のアドバイスは、スウィフト型の推論エンジンがより簡単に消化することができる一口サイズの塊にあなたのステートメントを分割しようとすることです。

関連する問題