【发布时间】:2021-06-26 07:38:40
【问题描述】:
在执行未立即完成的函数后,我试图从函数返回值。
例如:
func returnSomeValue() -> String {
let group = DispatchGroup()
group.enter()
service.longTimeTofinish(onFinish: { group.leave() } ) // <-- this function takes long time to finish
group.notify(queue: .main) {
return "Returning some value as example" // <-- Here is the issue
}
}
编译器显示错误“无法将 'String' 类型的值转换为闭包结果类型 Void”。 notify 内的闭包无法将值返回给我的外部函数。任何想法如何解决这个问题?
【问题讨论】:
-
不要
return这样,您正在使用异步调用,为什么要使其同步?通常,这是个坏主意。您确定吗?为什么不改用func yourFunc(completion: ((String) -> Void))?returnSomeValue()的代码是什么? -
从技术上讲,我认为您可以
group.wait()而不是group.notify,但我认为您不应该这样做。 -
您在滥用
DispatchGroup。它不是为使 one 异步任务同步而设计的。
标签: swift