我想使用Alamofire使用同步线程。
我正在使用此代码进行同步。
let queue1 = DispatchQueue(label: "queue1")
let queue2 = DispatchQueue(label: "queue2")
queue1.async {
self.dataFromServer.getData()
}
queue2.async {
//check if success to get the data from server
while(!self.dataFromServer.resultData){}
DispatchQueue.main.async {
// do something on screen
}
}
...
func getData() {
Alamofire.request(url).responseJSON { response in
if response.error == nil {
// get data
self.resultData = true
}else{
// error
}
}
}
我想在使用Alamofire从服务器获取数据后做一些事情。 它是否正确? 如果这不好,请告诉我有关同步的信息。 亲切的问候。
答案 0 :(得分:0)
你可以打电话
dispatch_sync
而不是异步,或者您可以在第一个API的成功块中调用其他API
答案 1 :(得分:0)
将getData()
函数修改为返回块,以便在api调用成功时获得回调
func getData(sucess:((Void) -> Void)?) {
Alamofire.request(url).responseJSON { response in
if response.error == nil {
// get data
sucess!()
self.resultData = true
}else{
// error
}
}
}
在getData()
函数的成功回调中收到api响应之后,做任何你想做的事情
答案 2 :(得分:0)
使用闭包还有另一种可能是这样做的好方法。
// You don't need to create queue and it asynchronously, since Alamofire calls are async.
// You can remove queue statement
let queue1 = DispatchQueue(label: "queue1")
queue1.async {
self.dataFromServer.getData(completionClosure: { (resultData) in
if resultData {
}
else {
}
})
}
然后在你的函数中有一个带有闭包的参数,并用成功或失败的布尔值调用它。
func getData(completionClosure: (Bool) -> Void) {
Alamofire.request(url).responseJSON { response in
if response.error == nil {
// get data
completionClosure(true)
}
else{
completionClosure(false)
}
}
}