Как получить значения от alamofire в отправленном заказе? - PullRequest
0 голосов
/ 07 мая 2019

У меня проблема с получением значений в массиве из нескольких URL-запросов. Я хочу хранить значения в порядке, как я отправил. Знайте, что alamofire работает асинхронно. Я пытался использовать GCD и обработчик завершения, но я не нашел решения. В этом примере я использую 3 функции, где первый получает значения, второй вызывает третий, когда первый выполняется, а затем перебирает эту функцию, используя полученные идентификаторы из первой функции.

Вот код:

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» хранит значения в случайном порядке. Если бы кто-то смог спасти мой день, помогая мне, я был бы очень признателен. Извините за мой английский.

...