Swift:我怎样才能为Alamofire使用同步线程?

时间:2017-06-08 06:55:30

标签: swift alamofire

我想使用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从服务器获取数据后做一些事情。 它是否正确? 如果这不好,请告诉我有关同步的信息。 亲切的问候。

3 个答案:

答案 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)
        }
    }
}