【发布时间】:2020-12-01 22:45:35
【问题描述】:
我不明白为什么这不起作用。在互联网上,我发现了很多使用本地 json(不是 api)或使用没有 apiKey 的 api 的解决方案,在我的情况下必须在标头中(在 Postman 中测试)。
struct Categories: Decodable {
let name: String
let id: Int
}
class ViewController: UIViewController {
let api_key = "..."
let urlString = "..."
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: urlString)
var request = URLRequest(url: url!)
request.addValue(api_key, forHTTPHeaderField: "user-key")
request.httpMethod = "GET"
URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data {
if let category = try? JSONDecoder().decode(Categories.self, from: data) {
print(category.name)
return
}
}
print("Fetch failed: \(error?.localizedDescription ?? "Unknown error")")
}.resume()
}
}
我从上面的代码中删除了urlString 和api_key,但我确信它们没问题,因为我在Postman 中测试了它们
问题 - 总是打印Fetch failed: Unknown error
这是我的 json 的样子:
{
"categories": [
{
"categories": {
"id": 1,
"name": "A"
}
},
{
"categories": {
"id": 2,
"name": "B"
}
}....
【问题讨论】:
-
try?=> 如果失败,我不想听错误,因为我不在乎。这就是它的意思。使用do/catch并捕获错误。此外,最好给出 print("Response: (String(data: data, encoding: .utf8)")` 的输出,这将有助于查看 JSON 的样子(如果它真的是 JSON)。 -
@Larme 我现在已经提供了 json 的一部分,请检查。谢谢
-
我可以很容易地看出哪里出了问题,但我强烈建议您执行 try/catch,并打印错误(顺便说一下,不是本地化描述),然后阅读它。如果还是不明白,可以在这里发帖,寻求更多帮助。但在我看来,学习如何调试(如何获取有价值的信息,即使您需要帮助)对您的帮助会更大。
标签: ios json swift api decodable