iOS-如何等待在dataTask上下载数据

时间:2018-06-20 14:17:42

标签: ios swift

我的应用程序正在从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
}

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

下载并设置食谱后,只需致电tableView.reloadData()

DispatchQueue.main.async {
      self.recipes = recipes
      self.tableView.reloadData()
}