ios - 如何使用 Alamofire 更改全局变量?

标签 ios swift uitableview closures alamofire

我想用 Alamofire 获取用户数据并将其填充到 tableView。

我的代码:

class MainTableViewController: UITableViewController {
    var userEntries = [UserEntries]()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        fetchUserData { (ue) in
            print("ue.count is: \(ue.count)")
            self.userEntries = ue
            print("self.userEntries.count in this block: \(self.userEntries.count)")
        }

        print("self.userEntries.count in viewDidLoad is: \(self.userEntries.count)")
    }

    func fetchUserData(completion: @escaping ([UserEntries]) -> Void) {
        //another code...

        Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding(destination: .httpBody), headers: headers).responseJSON { (response) in
            switch response.result {
            case .success(let value):
                let json = JSON(value)
                let data = json["mydata"][0].array
                var userEntries = [UserEntries]()
                //I have 2 records only        
                data?.forEach({ (p) in
                    userEntries.append(UserEntries(id: p["id"].stringValue, date: p["date"].stringValue, text: p["text"].stringValue))
                })
                completion(userEntries)
            case .failure(let error):
                print(error.localizedDescription)
            }
        }
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.userEntries.count //it is return 0...
    }
}

在 viewDidLoad 中我打印了这个:

self.userEntries.count in viewDidLoad is: 0 //it must be 2!!!

ue.count is: 2

self.userEntries.count in this block: 2

并且在 numberOfRowsInSection 方法中返回 0,因为

self.userEntries.count in viewDidLoad is: 0 //it must be 2!!!

如何正确设置“self.userEntries”变量(数组)以便在 tableView 方法中使用它?

最佳答案

由于获取数据的调用是异步的,因此您需要在完成中重新加载表

fetchUserData { (ue) in
   print("ue.count is: \(ue.count)")
   self.userEntries = ue
   print("self.userEntries.count in this block: \(self.userEntries.count)")
   self.tableView.reloadData()
}

关于ios - 如何使用 Alamofire 更改全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55975350/

相关文章:

ios - 将TabbarController中的一个ViewController替换为NavigationBar

iphone - IOS UItableview reloadRowsAtIndexPaths 刷新问题

iOS - [UITableView reloadData] 重新加载,但不删除旧单元格?

ios - 是否可以使用 OCMock stub NSProcessInfo ?

ios - 如何使用swift在IOS App中缓存过期图像

ios - 是否可以为 UILabel 中的一个字符设置不同的颜色?

ios - 汉堡菜单 UIPanGestureRecogniser

ios - 无法将使用代码创建的 socket 连接到静态单元格

ios - 没有应用程序更新的企业分发配置文件更新

iphone - 如何在 UINavigationController 中添加多行标题栏