如何在Swift中完成另一个代码后才能运行一个代码

时间:2017-05-16 14:01:24

标签: ios swift concurrency synchronization

我是异步和同步机制的新手。 在我的代码中,我必须在另一个完成后执行一个代码行。 它看起来像这样:

    func something(){

    let workerQueue = DispatchQueue.global(qos: .userInitiated)
            workerQueue.async{
         let info = getInfoFromTheWeb()//I need the info value in order to perform the next line
         saveToDB(info: info)

      DispatchQueue.main.async {
       //update a label text in the ui after getting and saving that info
      }

    }
}

请您的专业意见..

2 个答案:

答案 0 :(得分:4)

你应该DispatchGroup。通过使用DispatchGroup一个函数/代码行将等待另一个函数完成执行。

例如

let myGroup = DispatchGroup()
   myGroup.enter()
   let info = getInfoFromTheWeb()

当你从简单的电话

获得info
myGroup.leave()

当您执行以下代码的电话leave()功能时

myGroup.notify(queue: DispatchQueue.main) {

            saveToDB(info: info)
           /// Update UI elements
        }

答案 1 :(得分:0)

尝试这样的事情:

func something() {

    let workerQueue = DispatchQueue.global(qos: .userInitiated)
    workerQueue.async{

        if let info = getInfoFromTheWeb() {
            saveToDB(info: info)
            DispatchQueue.main.async {
                //update a label text in the ui after getting and saving that info
            }
        }

}