首页 > 解决方案 > 为什么对象不会附加到数组中?

问题描述

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 循环附加到数组中,但这也不起作用。任何帮助将不胜感激。

标签: iosjsonswiftapiparsing

解决方案


我要检查的第一件事是返回的数据是否正确。

是保护块触发返回还是数据正常?

JSON 是否能够正确解码响应?

是否articlesapiResults对象中填充。

接下来的事情是你不是试图将内容附加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()
    }
}

推荐阅读