我在从多个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”以随机顺序存储值。如果有人可以节省我的时间来帮助我,我将不胜感激。对不起,我的英语。