class NetworkManager{
var articleList = [Article]()
func downloadJsonData() -> Void{
let jsonUrl = "someUrl"
guard let url = URL(string: jsonUrl) else { return }
URLSession.shared.dataTask(with: url) { data, response, err in
//check err
//check response status
guard let data = data else { return }
do{
let apiResults = try JSONDecoder().decode(ApiResults.self, from: data)
//article list remains empty
self.articleList = apiResults.articles
} catch let err{
print(err)
}
}.resume()
}
}
我也曾尝试使用 for 循环追加到数组,但也没有用。任何帮助将不胜感激。
最佳答案
我首先要检查的是返回的数据是否正确。
保护 block 触发返回还是数据正常?
JSON 是否能够正确解码响应?
是否填充了 apiResults
对象中的 articles
。
接下来,您不会尝试将 apiResults.articles
的内容附加到您的列表中,而是让您的列表变成 apiResults.articles
的内容.
尝试以下操作,看看它是如何运行的:
class NetworkManager{
// better declaration syntax
var articleList: [Article] = []
func downloadJsonData() {
let jsonUrl = "https://newsapi.org/v2/everything?sources=nfl-news&apiKey=mykey"
guard let url = URL(string: jsonUrl) else { return }
URLSession.shared.dataTask(with: url) { data, response, err in
//check err
//check response status
guard let data = data else { return }
do{
let apiResults = try JSONDecoder().decode(ApiResults.self, from: data)
//article list remains empty
//appends contents instead of assignment
self.articleList.append(contentsOf: apiResults.articles)
} catch let err{
print(err)
}
}.resume()
}
}
关于ios - 为什么对象不附加到数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51316670/