Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用YouTube API显示Maxres或高缩略图_Ios_Swift_Youtube_Youtube Api_Alamofire - Fatal编程技术网

Ios 使用YouTube API显示Maxres或高缩略图

Ios 使用YouTube API显示Maxres或高缩略图,ios,swift,youtube,youtube-api,alamofire,Ios,Swift,Youtube,Youtube Api,Alamofire,我正在使用YouTube API为我的YouTube频道创建一个应用程序。我的一些视频有maxres缩略图,但有些没有。如果一个视频出现在我显示它们的tableview中,并且没有maxres缩略图,应用程序就会崩溃。我想告诉API使用maxres缩略图,如果该视频有maxres缩略图,但如果没有,则使用高缩略图。这是我的密码 Alamofire.request("https://www.googleapis.com/youtube/v3/search", parameters: ["part"

我正在使用YouTube API为我的YouTube频道创建一个应用程序。我的一些视频有maxres缩略图,但有些没有。如果一个视频出现在我显示它们的tableview中,并且没有maxres缩略图,应用程序就会崩溃。我想告诉API使用maxres缩略图,如果该视频有maxres缩略图,但如果没有,则使用高缩略图。这是我的密码

Alamofire.request("https://www.googleapis.com/youtube/v3/search", parameters: ["part":"snippet","maxResults":50,"channelId":CHANNEL_ID,"playlistId":UPLOADS_PLAYLIST_ID,"q":searchText,"type":"video","key":API_KEY], encoding: URLEncoding.default, headers: nil).responseJSON { (response) in

            if let JSON = response.result.value {

                if let dictionary = JSON as? [String: Any] {

                    var arrayOfVideos = [Video]()

                    guard let items = dictionary["items"] as? NSArray else { return }

                    for items in dictionary["items"] as! NSArray {
                        print("//Printing Video\n\(items)")
                        //  Create video objects off of the JSON response

                        let videoObj = Video()
                        videoObj.videoID = (items as AnyObject).value(forKeyPath: "id.videoId") as! String
                        videoObj.videoTitle = (items as AnyObject).value(forKeyPath: "snippet.title") as! String
                        videoObj.videoDescription = (items as AnyObject).value(forKeyPath: "snippet.description") as! String
                        videoObj.videoThumbnailUrl = (items as AnyObject).value(forKeyPath: "snippet.thumbnails.maxres.url") as! String // Here I need to tell the API to use the maxres thumbnail if there is one.

                        arrayOfVideos.append(videoObj)

                    }

似乎API甚至没有寻找maxres缩略图。它仅显示高、中和默认值。不过,每当我使用playlitems时,它都会显示maxres缩略图。嗯…

您应该永远不要隐式地打开基于web的数据。始终使用
而不是

对于缩略图,您应该检查是否存在maxres缩略图,如果它不可用,则使用默认值

if let thumbnailUrl = (items as AnyObject).value(forKeyPath: "snippet.thumbnails.maxres.url") as? String ?? (items as AnyObject).value(forKeyPath: "snippet.thumbnails.default.url") as? String {
    videoObj.videoThumbnailUrl = thumbnailUrl
}

我做这个页面是为了查看他们的URL很简单,不需要api。只有他们的视频ID。
至于“wep”或“jpg”,都是一样的。只是平台特定的


你需要决定的是你真的需要一个高分辨率的图像,因为大小会影响加载时间。您还需要调整图像大小以适应缩略图大小。

抱歉,这不起作用。我将
videoObj.videoThumbnailUrl=(项作为AnyObject.value)(forKeyPath:“snippet.thumbnails.maxres.url”)替换为!字符串
,其中包含您提供的代码。它只是在有maxres的视频上显示默认缩略图。似乎API没有调用maxres。在终端中,它仅显示高、中和默认值。不过,每当我使用播放列表项时,都有一个maxres选项。嗯。。。