使用来自 API 的 Swift 动态填充 iOS table 视图

Dynamically populating an iOS table view with Swift from an API

我目前正在创建一个应用程序来显示最新的足球比分。我已通过 URL 连接到 API,并将英格兰超级联赛的球队名称拉回到字符串数组中。

问题似乎来自填充 iOS table 视图,我打算用它来显示团队列表。数据似乎是从 API 中提取的,但由于某种原因,创建单元格的 TableView 方法和 returns 似乎没有被调用。只有当我将一个值硬编码到团队名称数组中时,我才能获得要调用的方法。

这是我的代码:

class Main: UIViewController {

    var names = [String]()

    override func viewDidLoad() {

        super.viewDidLoad()

        let URL_String = "https://football-api.com/api/?Action=standings&APIKey=[API_KEY_REMOVED]&comp_id=1204"

        let url = NSURL(string: URL_String)

        let urlRequest = NSURLRequest(URL: url!)

        let config = NSURLSessionConfiguration.defaultSessionConfiguration()
        let session = NSURLSession(configuration: config)

        let task = session.dataTaskWithRequest(urlRequest, completionHandler: {
            (data, response, error) in

            do {
                let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)

                if let teams = json["teams"] as? [[String : AnyObject]] {
                    for team in teams {
                        if let name = team["stand_team_name"] as? String {
                            self.names.append(name)
                        }
                    }

                }
            } catch {
                print("error serializing JSON: \(error)")
            }

        })

        task.resume()
    }



    // Number of Sections In Table
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    // Number of Rows in each Section
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return names.count
    }

    // Sets the content of each cell
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {


        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
        cell.textLabel?.text = names[indexPath.row]
        return cell

    }

}

只是想知道是否有人可以在这里为我指明正确的方向。此代码不会崩溃或抛出任何错误,它只是拒绝加载 table 视图。我可能想到的唯一原因是在完成对 API 的请求后,团队名称数组为空。但是,我已经在整个过程中设置了断点并检查了局部变量的值,并且正在按预期从 API 中提取所需的信息...

您的方法是正确的,一旦您从 API

获得新数据,只需使用 reloadData 刷新 table
if let teams = json["teams"] as? [[String : AnyObject]] {
                for team in teams {
                    if let name = team["stand_team_name"] as? String {
                        self.names.append(name)
                    }
                }

 dispatch_async(dispatch_get_main_queue(), { () -> Void in
    self.yourtableViewname.reloadData()
})
  }