【问题标题】:How to parse iTunes API in swift 4?如何在 swift 4 中解析 iTunes API?
【发布时间】:2019-09-01 03:06:16
【问题描述】:

我需要做一个用于搜索 iTunes API 的应用程序。

但我不能使用任何库,所以它与我习惯的不同。

有了这个网址,我应该通过软件获得“Instagram”搜索的第一个结果:“https://itunes.apple.com/search?entity=software&country=fr&limit=1&term=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?
}

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

【问题讨论】:

  • 只需执行 print(error) 并将其完整输出包含在您的问题中。

标签: ios json swift parsing jsondecoder


【解决方案1】:

请在响应关闭时检查空数据计数。

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

有时,空数据可以是非零数据。

【讨论】:

  • 在 OP 发布错误之前,仅凭猜测发布答案是没有意义的。
【解决方案2】:

错误在模型App中,我写了一个整数期望值的字符串。

您可以删除该问题。

【讨论】:

    猜你喜欢
    • 2018-11-24
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多