swift 在继续之前等待异步块[重复]

0s0u357o  于 2023-09-30  发布在  Swift
关注(0)|答案(2)|浏览(128)

此问题已在此处有答案

Returning data from async call in Swift function(13个回答)
关闭7天前。
我有一个函数,让我们称之为“a”,它运行一些代码,然后返回一个字符串“x”,在异步代码块中更新,然后返回。
我该如何让程序等到异步代码运行后才返回x?

func a() -> String {

    //code
    //code
    var x: String
    async block {

    x = "test"
    }
    return x
}
jogvjijk

jogvjijk1#

就像每个人指出的那样,您可以使用完成处理程序(closure)来执行操作。但是您也可以使用DispatchSemaphore等待异步调用完成。信号量在调用wait时获得一个锁,在异步块发出信号时释放该锁。

func a() -> String {
    var x = ""
    let semaphore = DispatchSemaphore(value: 0)
    DispatchQueue.main.async {
        x = "test"
        semaphore.signal()
    }
    semaphore.wait()
    return x
}
j7dteeu8

j7dteeu82#

您可以为此使用完成闭包

func a(completion: @escaping (_ value:String)->()) {
    var x: String = ""
    async block {
      x = "test"
      completion(x) //when x has new value
    }
}

//像这样调用(value将在完成块返回时执行

a { (value) in
     print(value)
  }

相关问题