使用结构解码JSON返回nil



我正在尝试了解对API的请求。我正在使用新闻API进行测试。我有两个结构和一个WebService函数。

我不知道这里可能出了什么问题,因为我正在遵循一个教程来学习这一点,并且正在做老师教我做的事情。

结构:

import Foundation
struct ArticleList: Decodable {
let status: String
let articles: [Article]
}
struct Article: Decodable { // Decodable because we only read, we do not send anything with this struct
let title: String
let description: String
}

这是WebService:

import Foundation
class Webservice {

func getArticles(url: URL, completion: @escaping ([Article]?) -> ()) {

print("URL: (url)")

URLSession.shared.dataTask(with: url) { data, response, error in
if let error = error {
print(error.localizedDescription)
completion(nil)
} else if let data = data {

let articleList = try? JSONDecoder().decode(ArticleList.self, from: data)


if let articleList = articleList {
completion(articleList.articles)
}

print(articleList?.articles)
}
}.resume()

}

}

WebService类中的最后一个打印是打印nil,尽管我正在使用Newsneneneba API链接:https://newsapi.org/v2/top-headlines?country=us&apiKey=XX,是的,我正在使用apiKey而不是XX,当我访问该链接时,我会得到json,所以这应该不是问题。

我在这里做错了什么?

永远不要使用

try?

它忽略错误,使用

do{
//Your code here
}catch{
print(error)
}

CodingKeys(stringValue: "description", intValue: nil)], debugDescription: "Expected String value but found null instead.", underlyingError: nil))告诉您,它发现了null,因此。。。

let description: String更改为let description: String?

为了使其可选,API将不总是具有description的值。

错误应该总是优雅地处理。您应该确定通往throw的方法,或者返回一个带有failureResult

如果出现问题,应告知用户。

相关内容

  • 没有找到相关文章