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