如何在返回值之前等待闭包完成

时间:2015-07-04 14:51:09

标签: ios swift asynchronous closures

如何在关闭完成后等待返回值。

示例:

func testmethod() -> String {
   var abc = ""
   /* some asynchronous service call block that sets abc to some other value */ {
      abc = "xyz"
   }
   return abc 
}

现在我希望方法只在为变量设置xyz值而不是空字符串后返回。

如何实现这一目标?

2 个答案:

答案 0 :(得分:4)

可能 (但请确保这是您真正想要的。)

在资源可用之前,您必须使用阻止线程的内容,例如信号量

var foo: String {
    let semaphore = DispatchSemaphore(value: 0)
    var string = ""

    getSomethingAsynchronously { something in
        string = something
        semaphore.signal()
    }

    semaphore.wait()
    return string
}
  

请记住,在getSomethingAsynchronously完成之前,您正在处理的主题将被阻止。

答案 1 :(得分:0)

这绝对不可能,因为它不是异步任务的工作方式。

你能做的就是这样:

func testmethod(callback: (abc: String) -> Void) {
   asyncTask() {
     callback(abc: "xyz")
   }
}

度过愉快的一天。