如何使用Swift 3打印YouTube频道的视频节目列表?

时间:2017-07-12 16:56:53

标签: ios swift youtube-api

我想打印每个"标题" in" items"," snippet",但我的for循环由于某种原因没有执行。如果有人可以帮助我,请提前谢谢。

代码:

with

JSON -I缩短了很长时间,因为有一个限制 - 我收到的是Google:

let url = URL(string: "https://www.googleapis.com/youtube/v3/search?key=\(key)&channelId=\(channelID)&part=snippet,id&order=date&maxResults=20")

    let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in

        if error != nil {
            print("ERROR")
        } else {
            if let content = data {
                do {
                    let json = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject
                    print(json)

                    for _ in json as! [String: AnyObject] {
                        if let items = json["items"] as? NSDictionary {
                            print(items)

                            if let snippet = items["snippet"] as? NSDictionary {
                                print(snippet)

                                if let title = snippet["title"] as? NSDictionary {
                                    print(title)
                                }
                            }

                        }
                    }

                } catch {
                    print("ERROR")
                }
            }
        }

    }
    task.resume()

1 个答案:

答案 0 :(得分:2)

首先不要在Swift中使用NSDictioanryNSArray而不是使用Swift本机类型Dictionary([:])Array([]),因为使用此编译器将很容易理解什么类型价值对象的。同样在Swift中,不需要指定mutableContainers选项,只需使用var声明它就可以获得可变对象。

现在,您的JSON回复items Array Dictionary Dictionary而非直接title,而snippet位于dictionary内这个items数组的每个JSON的字典,所以你需要遍历items数组而不是遍历if let content = data { if let json = (try? JSONSerialization.jsonObject(with: content, options: [])) as? [String:Any], let items = json["items"] as? [[String:Any]] { for item in items { if let snippet = item["snippet"] as? [String:Any], let title = snippet["title"] as? String { print(title) } } } }

{{1}}