来自API的数据未显示在我的UITableView中

时间:2019-03-25 21:02:17

标签: ios uitableview swift4

我正在尝试将API中的数据显示到UITableView中。我遇到的问题是我没有得到任何传入UITableView的数据。现在,我看到数据源和代理已连接。 Data Source and Delegate 我也知道我能够访问API,因为我能够打印到控制台。

没有错误,只是我看不到任何数据。下面是我的代码。

class StandingTableViewController: UITableViewController {

var standing = ""
let SEASON_URL = "https://ergast.com/api/f1"

var champions: [DriverStanding] = []
override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.title = standing

    fetchJSON(standing: standing)

}
private func fetchJSON(standing: String){
    let JsonUrlString = SEASON_URL + "/" + String(standing) + "/driverstandings.json"
    print(JsonUrlString)
    guard let url = URL(string: JsonUrlString) else { return }

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

        DispatchQueue.main.async {
            if let err = err {
                print("Failed to get data from url:", err)
                return
            }

            guard let data = data else { return }
            do {
                let decoder = JSONDecoder()
                // Swift 4.1
                decoder.keyDecodingStrategy = .convertFromSnakeCase
                let firstDriver = try decoder.decode(F1Data.self, from: data)
                self.champions = firstDriver.mrData.standingsTable.standingsLists[0].driverStandings
                self.tableView.reloadData()

            } catch {
                print(error)
            }
        }
    }.resume()
}

// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 0
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return champions.count
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cellId")

    let champion = champions[indexPath.row]
    let driverName = "\(champion.driver.givenName!) \(champion.driver.familyName!)"
    cell.textLabel?.text = driverName


    return cell
}

任何帮助将不胜感激。我检查了“ cellId”是否与我的代码匹配。

2 个答案:

答案 0 :(得分:1)

numberOfSections中返回1或删除整个方法,将其作为默认值 1

override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 0
}

然后重复使用单元格,在Interface Builder中设置字幕样式并编写

let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath)

答案 1 :(得分:-1)

对此有任何更新吗?是否删除了方法:

override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 0
}

工作吗?