func foo() -> String {
var str = ""
let semaphore = DispathSemaphore(value: 1) //1 if you are waiting for one closure function to signal the semaphore to continue the main thread execution
getAsync() {
//populate the variable
str = "bar"
semaphore.signal()
}
semaphore.wait()
return str
}
4条答案
按热度按时间zphenhs41#
这是可能的*(但要确保这是您真正想要的。)*。
您必须使用一些可以阻塞线程直到资源可用的东西,比如信号量。
请记住您正在处理的线程将被阻塞,直到
getSomethingAsynchronously
完成。ccrfmcuu2#
是的,可以等待闭包函数填充数据,然后返回变量。虽然,建议避免使用信号量来做这件事,但我认为这是唯一的方法。
odopli943#
从Swift 5.5开始,推荐使用
async/await
。如果API没有提供async
版本,您可以使用Continuation
创建自己的版本您必须在异步上下文中调用该方法,例如在
Task
中f1tvaqid4#
这是绝对不可能的,因为这不是异步任务的工作方式。
你可以这样做:
祝你愉快。
编辑(适用于较新的Swift版本):