我的应用程序正在从API下载一些数据,我想将这些数据保存在一个数组中,该数组将用于填充表视图。但是,当表视图开始构建时,数据尚未下载,并且我的数组为空。

 var recipes: [Recipe] = []

 func getData(completionHandler: @escaping ([Recipe]) -> Void) {
    let urlString = "api_url"

    guard let url = URL(string: jsonURL) else { return }

    URLSession.shared.dataTask(with: url) { (data, response, err)  in

        guard let data = data else { return }
        do {
            let recipes: [Recipe] = try JSONDecoder().decode([Recipe].self, from: data)
            DispatchQueue.main.async {
                self.recipes = recipes
            }
        } catch {

        }
    }.resume()
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.recipes.count
}

最佳答案

必须重新加载tableview。在do块中,将代码更改为以下内容:

self.recipes = try JSONDecoder().decode([Recipe].self, from: data)
DispatchQueue.main.async {
     self.tableView.reloadData()
}

关于ios - iOS-如何等待在dataTask上下载数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50950400/

10-11 17:50