如何从alamofire中按发送顺序获取值?

时间:2019-05-07 12:08:35

标签: json swift image alamofire

我在从多个url请求中获取数组中的值时遇到问题。我想按我发送的顺序存储值。知道alamofire是异步工作的。我尝试使用GCD和完成处理程序,但未找到解决方案。在此示例中,我使用3个func,其中第一个获取值,第二个在第一个获取值时调用第三个,然后使用从第一个func接收到的id遍历该func。

这是代码:

func getFuncOne(){
        dispatchGroup.enter()
        Alamofire.request(urlDel, method: .get, headers: header)
            .responseJSON { (response) in
                if response.result.isSuccess {
                    guard let responseData = response.data else {return}
                    let jsonDecoder = JSONDecoder()
                    self.imagee = try! jsonDecoder.decode([Imagee].self, from: responseData)
                    self.dispatchGroup.leave()
                }
                else {
                    print("Error: \(String(describing: response.result.error))")
                }
          }
    }

    func reloading(){
        getFuncOne()
        dispatchGroup.notify(queue: .main){
            for res in self.imagee{
                print(res)
                if res.pic != nil{
                    let idd = res.pic?.description
                     self.getPic(idd: idd!)
                }
                else {
                    let idd = 1
                    self.getPic(idd: idd.description)
                }
                //let idd = res.pic?.description

                //print("aa")
            }
        }
    }

    func getPic(idd : String) {
        //dispatchGroup2.enter()
        let urll = urlPic + idd
        print(urll)
            let url = URL(string: urll)
            Alamofire.request(url!, method: .get, parameters: nil, headers: header).responseJSON { (response) in
                if let responseObj = response.value {
                    do {
                        let decodedData = try JSONDecoder().decode(Users.self, from: response.data!)
                        self.resultArray.append(decodedData)
// this array is populated in random order
                        var counter = self.imagee.count
                        if self.x < self.imagee.count {
                            self.x = self.x+1
                            print("counting")
                        }
                        else {
                            print("done counting")
                            self.tableView.reloadData()
                        }

                    } catch {
                    }
                }
                else {
                    print("nothing")
                }
            }
        }

一切正常,但是“ resultArray”以随机顺序存储值。如果有人可以节省我的时间来帮助我,我将不胜感激。对不起,我的英语。

0 个答案:

没有答案