Swift 3解析youtube视频不';t显示结果并保持加载-IOS 10
我正在尝试通过json解析获取youtube频道和视频,我是Swift 3的新手。但是,加载图标不会消失,也不会显示结果,日志中也不会出现错误 这是我的代码: 1/func GetVideosForchannelIndex: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
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()