Swift 3解析youtube视频不';t显示结果并保持加载-IOS 10

Swift 3解析youtube视频不';t显示结果并保持加载-IOS 10,ios,swift,swift3,ios10,Ios,Swift,Swift3,Ios10,我正在尝试通过json解析获取youtube频道和视频,我是Swift 3的新手。但是,加载图标不会消失,也不会显示结果,日志中也不会出现错误 这是我的代码: 1/func GetVideosForchannelIndex: func getVideosForChannelAtIndex(_ index: Int!) { let playlistID = channelsDataArray[index]["playlistID"] as! String let urlStrin

我正在尝试通过json解析获取youtube频道和视频,我是Swift 3的新手。但是,加载图标不会消失,也不会显示结果,日志中也不会出现错误

这是我的代码:

1/func GetVideosForchannelIndex:

func getVideosForChannelAtIndex(_ index: Int!) {

    let playlistID = channelsDataArray[index]["playlistID"] as! String
    let urlString = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=\(playlistID)&key=\(apiKey)"
    let targetURL = URL(string: urlString)
    var url = URLRequest(url: targetURL!)
    url.httpMethod = "GET"
    URLSession.shared.dataTask(with: url) { (data, response, error) in
        let httpStatus = response as? HTTPURLResponse

        if httpStatus!.statusCode == 200 && error != nil {



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

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

                for i in 0 ..< items.count {
                    let playlistSnippetDict = (items[i] as Dictionary<String, AnyObject>)["snippet"] as! Dictionary<String, AnyObject>

                    var desiredPlaylistItemDataDict = Dictionary<String, AnyObject>()

                    desiredPlaylistItemDataDict["title"] = playlistSnippetDict["title"]
                    desiredPlaylistItemDataDict["thumbnail"] = ((playlistSnippetDict["thumbnails"] as! Dictionary<String, AnyObject>)["default"] as! Dictionary<String, AnyObject>)["url"]
                    desiredPlaylistItemDataDict["videoID"] = (playlistSnippetDict["resourceId"] as! Dictionary<String, AnyObject>)["videoId"]

                    self.videosArray.append(desiredPlaylistItemDataDict)

                    self.tableView.reloadData()
                }
            } catch {
                print(error)
            }
        }
        else {
            print("Error while loading channel videos: \(error)")
        }

        self.activityView.isHidden = true
    }



        }
func getVideosForChannelAtIndex(\uindex:Int!){
将playlid=channelsDataArray[index][“playlid”]设为!字符串
让URL字符串=”https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=\(播放ID)&key=\(apiKey)”
让targetURL=URL(字符串:urlString)
var url=URLRequest(url:targetURL!)
url.httpMethod=“GET”
URLSession.shared.dataTask(带:url){(数据、响应、错误)在
让httpStatus=响应为?HTTPURLResponse
如果httpStatus!.statusCode==200&&error!=nil{
做{
让resultsDict=try JSONSerialization.jsonObject(使用:data!,选项:.allowFragments)作为!字典
让items:Array=resultsDict[“items”]作为!数组
对于0中的i..
2/func GetChannel详细信息:

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"
    URLSession.shared.dataTask(with: request) { (data, response, error) in
        let httpStatus = response as? HTTPURLResponse

        if httpStatus!.statusCode == 200 && error != nil {



            do {
                let resultsDict = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) 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)")
        }
    }



    }


    }
func getChannelDetails(uuUseChannelIDParam:Bool){
var urlString:String!
如果!使用ChannelIDParam{
URL字符串=”https://www.googleapis.com/youtube/v3/channels?part=contentDetails,snippet&forUsername=\(desiredChannelsArray[channelIndex])&key=\(apiKey)”
}
否则{
URL字符串=”https://www.googleapis.com/youtube/v3/channels?part=contentDetails,snippet&id=\(desiredChannelsArray[channelIndex])&key=\(apiKey)”
}
让targetURL=URL(字符串:urlString)
var request=URLRequest(url:targetURL!)
request.httpMethod=“GET”
URLSession.shared.dataTask(带:请求){(数据、响应、错误)在
让httpStatus=响应为?HTTPURLResponse
如果httpStatus!.statusCode==200&&error!=nil{
做{
让resultsDict=try JSONSerialization.jsonObject(使用:data!,选项:.allowFragments)作为!字典
让items:AnyObject!=resultsDict[“items”]作为AnyObject!
让firstItemDict=(项作为!数组)[0]作为!字典
让snippetict=firstItemDict[“snippet”]作为!字典
var DesiredValuesDictionary=Dictionary()
desiredValuesDict[“title”]=snippetDict[“title”]
desiredValuesDict[“description”]=snippetDict[“description”]
desiredValuesDict[“缩略图”]=((snippetDict[“缩略图”]as!Dictionary)[“默认值”]as!Dictionary)[“url”]
desiredValuesDict[“PlayId”]=((firstItemDict[“contentDetails”]as!Dictionary)[“RelatedPlayList”]as!Dictionary)[“uploads”]
self.channelsDataArray.append(desiredValuesDict)
self.tableView.reloadData()
self.channelIndex+=1
如果self.channelIndex
3/func文本字段应返回:

func textFieldShouldReturn(_ textField: UITextField) -> Bool {

    textField.resignFirstResponder()
    activityView.isHidden = false

    var type = "channel"
    if segmentDisplay.selectedSegmentIndex == 1 {

    type = "video"
        videosArray.removeAll(keepingCapacity: false)

    }
    var urlString = "https://www.googleapis.com/youtube/v3/search?part=snippet&q=\(textField.text)&type=\(type)&key=\(apiKey)"

    urlString = urlString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!



    let targetURL = URL(string: urlString)

    var request = URLRequest(url: targetURL!)
    request.httpMethod = "GET"

URLSession.shared.dataTask(with: request) { (data, response, error) in
let httpStatus = response as? HTTPURLResponse
if httpStatus!.statusCode == 200 && error != nil {


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

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

        for i in 0 ..< items.count {
            let snippetDict = items[i]["snippet"] as! Dictionary<String, AnyObject>

            if self.segmentDisplay.selectedSegmentIndex == 0 {
                self.desiredChannelsArray.append(snippetDict["channelId"] as! String)
            }
            else {
                var videoDetailsDict = Dictionary<String, AnyObject>()
                videoDetailsDict["title"] = snippetDict["title"]
                videoDetailsDict["thumbnail"] = ((snippetDict["thumbnails"] as! Dictionary<String, AnyObject>)["default"] as! Dictionary<String, AnyObject>)["url"]
                videoDetailsDict["videoID"] = (items[i]["id"] as! Dictionary<String, AnyObject>)["videoId"]

                self.videosArray.append(videoDetailsDict)

                self.tableView.reloadData()
            }
        }
    } catch {
        print(error)
    }

    if self.segmentDisplay.selectedSegmentIndex == 0 {
        self.getChannelDetails(true)
    }

}
else {
    print("Error while loading channel videos: \(error)")
}

self.activityView.isHidden = true
    }


    return true


}
func textField应该返回(\utextfield:UITextField)->Bool{
textField.resignFirstResponder()辞职
activityView.isHidden=false
var type=“通道”
如果segmentDisplay.selectedSegmentIndex==1{
type=“视频”
videosArray.removeAll(保留容量:false)
}
var urlString=”https://www.googleapis.com/youtube/v3/search?part=snippet&q=\(textField.text)&type=\(type)&key=\(apiKey)”
urlString=urlString.addingPercentEncoding(使用AllowedCharacters:CharacterSet.UrlQueryLowed)!
让targetURL=URL(字符串:urlString)
var request=URLRequest(url:targetURL!)
request.httpMethod=“GET”
URLSession.shared.dataTask(带:请求){(数据、响应、错误)在
让httpStatus=响应为?HTTPURLResponse
如果httpStatus!.statusCode==200&&error!=nil{
做{
让resultsDict=try JSONSerialization.jsonObject(使用:data!,选项:.allowFragments)作为!字典
让items:Array=resultsDict[“items”]作为!数组
对于0中的i..URLSession.shared.dataTask(with: request) { (data, response, error) in

  ...

}.resume()
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in

  ...

}
task.resume()