2016-09-28 22 views
-1

Swift 3のアップグレード後にすべてが正常に動作していました。これは単に、次のエラーを与えている:タイプ "Any"には下付きメンバはありません/ Swift 3

for video in JSON["items"] as? NSArray { 

それへの私の前の質問と解決策をここで見つけることができます:

私が持っている

Ambiguous use of 'subscript' with NSArray & JSON

次の行に

Type "Any" has no subscript members

私の質問をタイプしている間に提案された質問および答えを見たが、今のところ解決策を思いつくことができなかった。

class videoModel: NSObject { 

let API_KEY = "Xxxxxxxxxxx" 

let UPLOADS_PLAYLIST_ID = "yyyyyyyyyyyyyyy" 


var videoArray = [Video]() 

var delegate: VideoModelDelegate? 

let urladdress = "https://www.googleapis.com/youtube/v3/playlistItems" 


func getFeedVideos() { 

    Alamofire.request((urladdress), method: .get, parameters: ["part":"snippet", "playlistId": UPLOADS_PLAYLIST_ID,"key": API_KEY, "maxResults": "50"], encoding: JSONEncoding.default).responseJSON(completionHandler: { (response) -> Void in 

     if let JSON = response.result.value { 

      var arrayOfVideos = [Video]() 

      print(JSON) 

      for video in JSON["items"] as? NSArray { 

       let videoObj = Video() 
       videoObj.videoId = video.valueForKeyPath("snippet.resourceId.videoId") as! String 
       videoObj.videoTitle = video.valueForKeyPath("snippet.title") as! String 
       videoObj.videoDescription = video.valueForKeyPath("snippet.description") as! String 
       videoObj.videoThumbnailUrl = video.valueForKeyPath("snippet.thumbnails.maxres.url") as! String 

       arrayOfVideos.append(videoObj) 

      } 

      self.videoArray = arrayOfVideos 

      if self.delegate != nil { 

       self.delegate?.dataReady() 

      } 
     } 
    }) 
} 
} 
+0

ちょっと、これを修正しましたか?もしそうなら、最終的な答えを教えてください。私はまったく同じエラーを抱えています。私も全く同じコードを使用しています。このエラーを解決した後、最終コードを共有してください。ありがとう – user3707644

+1

これを見てください:cl.ly/02030q1Q0E10。詳しい情報が必要な場合はお知らせください。 –

+0

クラスのソースコード全体を共有できますか?私はまだ問題を抱えています:JSON = response.result.valueとしたら? NSArray、それは常に偽です – user3707644

答えて

1

JSONオブジェクトのタイプを[String : Any]に指定する必要があります。

if let JSON = response.result.value as? [String : Any] { 
     if let items = JSON["items"] as? [[String : Any]] { 
      for video in items { 
        //Here use video["snippet.resourceId.videoId"] instead of value for key 
      } 
     } 
} 

注:あなたの代わりにNSArray & NSDictionaryの迅速一般的な配列とディクショナリオブジェクトを使用した場合、迅速に、それは打者です。

+0

私はそうすると、次の行にエラーが表示されます。 JSON ["items"]の動画は? NSArray これを次のように変更することをお勧めします: (JSON ["items"] as NSArray) エラーメッセージで次の行にエラーが表示されます。 'value'を '(String)'型の引数リストで呼び出せません " videoObj.videoId =(video as AnyObject).value(" snippet .resourceId.videoId ")as!文字列 –

+0

編集した回答を確認する –

関連する問題