如何快速分析iTunes API?

时间:2019-04-10 15:24:57

标签: ios json swift parsing jsondecoder

我需要创建一个用于通过iTunes API搜索的应用程序。

但是我不能使用任何库,因此它与我以前使用的库不同。

通过该URL,我应该通过软件“ https://itunes.apple.com/search?entity=software&country=fr&limit=1&term=instagram”获得“ Instagram”搜索的第一个结果

我尝试通过这部分代码获得结果:

let url = URL(string: "https://itunes.apple.com/search?entity=software&country=fr&limit=1&term=instagram")!

URLSession.shared.dataTask(with: url) { (data, response, error) in
    guard let data = data else { return }
    do {
        let decodedResponse = try JSONDecoder().decode(iTunesResponse.self, from: data)
    } catch let error {
        print("Failed to load: \(error.localizedDescription)")
    }
}.resume()

但是它不起作用并且总是会捕获错误。

这是我可以获得的JSON:

{
    "resultCount": 1,
    "results": [{
        "screenshotUrls": ["https://is2-ssl.mzstatic.com/image/thumb/Purple123/v4/e9/d2/bf/e9d2bf85-7c32-0ac3-cc1f-e7160abbb8d6/source/392x696bb.jpg"],
        ...
        "userRatingCount": 1697595
    }]
}

我使用的模型:

struct iTunesResponse: Decodable {
    let resultCount: Int?
    let results: [App]?
}

struct App: Decodable {
 let isGameCenterEnabled: Bool?
 let screenshotUrls: [String]?
 ...
 let userRatingCount: Int?
}

我尝试使用有关此功能的其他主题来解决我的问题,但是我无法解决它。

2 个答案:

答案 0 :(得分:0)

请在响应结束时检查是否有空数据计数。

guard let data = data, data.count > 0 else { return }

有时候,数据可以为非零,而数据为空。

答案 1 :(得分:0)

错误出在应用程序模型中,我为整数期望值写了String。

您可以删除该问题。