2016-09-28 77 views
-1

在Swift 2中一切正常,但在Swift 3升級後它失敗了。它只是給了以下錯誤:類型「任何」沒有下標成員/ Swift 3

Type "Any" has no subscript members

以下行:

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

我剛纔的問題及解決辦法可以在這裏找到:

Ambiguous use of 'subscript' with NSArray & JSON

我有在輸入我的問題時也查看了建議的問題和答案,但目前還無法提供解決方案。

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 
      } 
     } 
} 

注:在急速的是連擊,如果你使用SWIFT通用陣列和字典對象,而不是NSArray & NSDictionary

+0

當我這樣做時,我在下面的行中得到一個錯誤; JSON視頻[「項目」]爲? NSArray 並建議我將其更改爲以下內容: (JSON [「items」] as?NSArray)中的視頻! 但是,然後我在錯誤消息的下一行中得到一個錯誤:無法用類型爲'(String)'的參數列表調用'值'「 videoObj.videoId =(video as AnyObject).value(」snippet .resourceId.videoId「)as!字符串 –

+0

檢查編輯的答案 –

相關問題