Я делаю 5 запросов, один за другим.Первый запрос - получение идентификатора профиля и токена доступа.А остальные загружают данные для каждого идентификатора профиля.
Я делаю forEach()
и запрашиваю данные для каждого идентификатора профиля, который у меня есть.Странные вещи начинаются, когда я перезагружаю данные.В большинстве случаев это правильно, но иногда он сначала получает данные для индекса 1, а затем для 0. И я не могу понять, почему.Я попытался for item in id
, и я попытался сохранить идентификаторы профиля в другой массив и использовать его, но он имеет тот же результат.Единственное, что я не пробовал, это точно сказать, какой индекс он должен использовать.Но я не могу понять, как цикл for и запрос работают вместе.Иногда запросы идут один за другим, иногда нет.
self.api.getProfileData(access_token: token) { (profiles, err) in
if err != nil {
print("ERROR: \(err!)")
} else {
if let profile = profiles {
let id = profile[0].data.profiles
let token = profile[0].data.access_token
if self.didLogin == true {
self.profileId = id
}
self.group.enter()
var i = 0
id.enumerated().forEach({ (index, prof) in
self.api.getProfiles(token: token!, profileId: prof.id!, completion: { (profileArray) in
debugPrint("PROFILES: \(prof.id!) At index: \(index)")
if let profileArray = profileArray {
self.profile = profileArray
}
self.api.getMarks(token: token!, profileId: prof.id!, completion: { (marksArray) in
debugPrint("MARKS: \(prof.id!) At index: \(index)")
if let marksArray = marksArray {
self.marks = marksArray
}
self.api.getBUP(token: token!, profileId: prof.id!, completion: { (bup) in
debugPrint("BUP: \(prof.id!) At index: \(index)")
if let bup = bup {
self.bup = bup
}
self.api.getRUP(token: token!, profileId: prof.id!, completion: { (rup) in
debugPrint("RUP: \(prof.id!) At index: \(index)")
if let rup = rup {
self.rup = rup
i += 1
if i == profile[0].data.profiles.count {
self.group.leave()
}
}
})
})
})
})
self.group.notify(queue: .main, execute: {
if i != profile[0].data.profiles.count {
i += 1
} else {
SVProgressHUD.dismiss()
UIView.transition(with: self.tableView, duration: 0.2, options: .transitionCrossDissolve, animations: {
// if self.didLogin == true {
self.tableView.reloadData()
// }
}, completion: {(completed) in
if completed {
self.tableView.isUserInteractionEnabled = true
self.didLogin = false
}
})
}
})
})
}
}
}
Я ожидаю что-то вроде:
"PROFILES: 5176 At index: 0"
"PROFILES: 5177 At index: 1"
"MARKS: 5176 At index: 0"
"MARKS: 5177 At index: 1"
"BUP: 5176 At index: 0"
"BUP: 5177 At index: 1"
"RUP: 5176 At index: 0"
"RUP: 5177 At index: 1"
Но я получаю:
"PROFILES: 5176 At index: 0"
"PROFILES: 5177 At index: 1"
"MARKS: 5177 At index: 1"
"MARKS: 5176 At index: 0"
"BUP: 5177 At index: 1"
"BUP: 5176 At index: 0"
"RUP: 5176 At index: 0"
"RUP: 5177 At index: 1"
или
"PROFILES: 5176 At index: 0"
"PROFILES: 5177 At index: 1"
"MARKS: 5177 At index: 1"
"MARKS: 5176 At index: 0"
"BUP: 5176 At index: 0"
"BUP: 5177 At index: 1"
"RUP: 5176 At index: 0"
"RUP: 5177 At index: 1"