2016-12-23 77 views
0

我試圖使用上迅速3下面的代碼獲取YouTube頻道的詳細信息:錯誤加載YouTube頻道的詳細信息,返回nil

func getChannelDetails(_ useChannelIDParam: Bool) { 

    var urlString: String! 

    if !useChannelIDParam { 
     urlString = "https://www.googleapis.com/youtube/v3/channels?part=contentDetails,snippet&forUsername=\(desiredChannelsArray[channelIndex])&key=\(apiKey)" 
    } 
    else { 
     urlString = "https://www.googleapis.com/youtube/v3/channels?part=contentDetails,snippet&id=\(desiredChannelsArray[channelIndex])&key=\(apiKey)" 
    } 

    let targetURL = URL(string: urlString) 
var request = URLRequest(url: targetURL!) 
request.httpMethod = "GET" 
    let sessionConfig = URLSessionConfiguration.default 
    let session = URLSession(configuration: sessionConfig) 

session.dataTask(with: request) { (data, response, error) in 
    DispatchQueue.main.async { 

    if error != nil { 



      do { 
       let resultsDict = try JSONSerialization.jsonObject(with: data!, options: []) as! Dictionary<String, AnyObject> 

       let items: AnyObject! = resultsDict["items"] as AnyObject! 
       let firstItemDict = (items as! Array<AnyObject>)[0] as! Dictionary<String, AnyObject> 

       let snippetDict = firstItemDict["snippet"] as! Dictionary<String, AnyObject> 

       var desiredValuesDict: Dictionary<String, AnyObject> = Dictionary<String, AnyObject>() 
       desiredValuesDict["title"] = snippetDict["title"] 
       desiredValuesDict["description"] = snippetDict["description"] 
       desiredValuesDict["thumbnail"] = ((snippetDict["thumbnails"] as! Dictionary<String, AnyObject>)["default"] as! Dictionary<String, AnyObject>)["url"] 

       desiredValuesDict["playlistID"] = ((firstItemDict["contentDetails"] as! Dictionary<String, AnyObject>)["relatedPlaylists"] as! Dictionary<String, AnyObject>)["uploads"] 


       self.channelsDataArray.append(desiredValuesDict) 


       self.tableView.reloadData() 

       self.channelIndex += 1 
       if self.channelIndex < self.desiredChannelsArray.count { 
        self.getChannelDetails(useChannelIDParam) 
       } 
       else { 
        self.activityView.isHidden = true 
       } 
      } catch { 
       print(error) 
      } 

     } else { 
      print("Error while loading channel details: \(error)") 
     }} 
    }.resume() 



    } 

但是它總是返回以下錯誤:

Error while loading channel details: nil 

我對swift很陌生,有人建議在代碼中打開option,但我不知道該怎麼做,我不確定這是否會成爲問題。

代碼有什麼問題?我正確實現了瀏覽器的Api密鑰。

我下面這個教程:https://www.appcoda.com/youtube-api-ios-tutorial/

+0

'desiredChannelsArray'的類型是什麼? – Keiwan

+0

var desiredChannelsArray = [「Google」,「Apple」] 這是數組字符串 – HichemRomdhane

+0

好吧,這樣不會是問題。難道'apiKey'是一個隱含的解包可選項嗎? – Keiwan

回答

0

if error != nil {應該是if error == nil {

目前,您正在跳過基本代碼,如果沒有錯誤,而只是打印有一個。