пытаюсь реализовать в Playground тестовый пример получения данных с сайта iTunes. Но данные не приходят, не могу понять почему.
import UIKit
import PlaygroundSupport
extension URL {
func withQueries(_ queries: [String: String]) -> URL? {
var components = URLComponents(url: self, resolvingAgainstBaseURL: true)
components?.queryItems = queries.map {
URLQueryItem(name: $0.0, value: $0.1)
}
return components?.url
}
}
struct StoreItem: Codable {
var title: String
var artist: String?
enum CodingKeys: String, CodingKey {
case title = "term"
case artist = "media"
}
init(from decoder: Decoder) throws {
let valueContainer = try decoder.container(keyedBy: CodingKeys.self)
self.title = try valueContainer.decode(String.self, forKey: CodingKeys.title)
self.artist = try valueContainer.decode(String.self, forKey: CodingKeys.artist)
}
}
PlaygroundPage.current.needsIndefiniteExecution = true
func fetchInfo(completion: @escaping (StoreItem?) -> Void) {
let baseURL = URL(string: "https://itunes.apple.com/search?")!
let query: [String: String] = [
"term": "Beatles",
"media": "musicVideo"
]
let url = baseURL.withQueries(query)!
let task = URLSession.shared.dataTask(with: url) {
(data, response, error) in
let jsonDecoder = JSONDecoder()
if let data = data, let string = try? jsonDecoder.decode(StoreItem.self, from: data) { completion(string)
} else {
print("Either no data was returned, or data was not properly decoded.")
completion (nil)
}
PlaygroundPage.current.finishExecution()
}
task.resume()
}
fetchInfo { (fetchedInfo) in
print(fetchedInfo)
}
Подозреваю, что проблема в структуре запроса, которая let query. И здесь свои непонятки. На сайте в описании ключевых параметров для запроса указано одни примеры, а в результатах запроса их нет, а есть другие. Например, term есть в ключевых параметрах, но нет в результатах. И наоборот, kind есть в результатах, но нет в ключевых параметрах. Как это вообще соотносится друг с другом?