如何使用for循环中的多个alamofire请求在tableViewCell中获取结果

时间:2019-04-27 09:30:36

标签: swift synchronization tableview alamofire

我是快速编程的新手,我相信我的要求很简单。我试图找到解决方案,但没有。我需要制作能够先处理多个Alamofire请求的应用,然后在tableViewCell的结果中显示结果。

我已尝试使用dispatchGroup等。 这是我的代码:

class TViewController: UITableViewController {

    var name = Name()
    var array = ["3", "4"]
    let urlName = "http://somerestUrl/"

    override func viewDidLoad() {
        super.viewDidLoad()
        getName()
    }

    func getName(){
        for id in self.array{
            let newUrl = urlName + id // 1
                Alamofire.request(newUrl, method: .get) //2
                    .responseJSON { response in
                        if response.result.isSuccess {
                            guard let responseData = response.data else {return}
                            let jsonDecoder = JSONDecoder() 
                            self.name = try! jsonDecoder.decode(Name.self, from: responseData) //3
                            self.tableView.reloadData() //4
                        } else {
                            print("Error: \(String(describing: response.result.error))")
                        }
                  }
            }
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

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

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TViewCell
        print("Inside tableView") //5
        cell.nameLbl.text = name.format?.description
        return cell
    }

}

我认为我需要通过func getName并使用for循环的同步方法coz。我已经尝试过信号量方法,但是仍然无法按顺序获得结果。如果有人可以在此代码上给我示例,我将不胜感激,因为我已尝试将其修复几天。我也有一个疑问,为什么我在上一个tableView函数中的打印消息每次都被调用两次而不是一次?对不起,我的英语。

0 个答案:

没有答案