调度组通知内函数的Swift返回值
我试图在执行一个没有立即完成的函数之后从函数返回一个值 例如:调度组通知内函数的Swift返回值,swift,Swift,我试图在执行一个没有立即完成的函数之后从函数返回一个值 例如: func returnSomeValue() -> String { let group = DispatchGroup() group.enter() service.longTimeTofinish(onFinish: { group.leave() } ) // <-- this function takes long time to finish group.notify(que
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
}
}
func returnSomeValue()->字符串{
let group=DispatchGroup()
group.enter()
service.longtimeofinish(onFinish:{group.leave()})/返回notify
isvoid
它的作用域与函数不同,需要完成
func returnSomeValue(completion:@escaping((String) -> ())) {
let group = DispatchGroup()
group.enter()
service.longTimeTofinish(onFinish: { group.leave() } ) // <-- this function takes long time to finish
group.notify(queue: .main) {
completion("Returning some value as example")
}
}
返回内部的notify
是void
它的范围不同于函数,您需要完成
func returnSomeValue(completion:@escaping((String) -> ())) {
let group = DispatchGroup()
group.enter()
service.longTimeTofinish(onFinish: { group.leave() } ) // <-- this function takes long time to finish
group.notify(queue: .main) {
completion("Returning some value as example")
}
}
不要return
这样,你正在使用一个异步调用,为什么要使它同步?通常,这是个坏主意。你确定吗?为什么不改为func yourFunc(completion:((String)->Void))
呢?returnSomeValue()
的代码调用什么?从技术上讲,我认为你可以group.wait()
而不是组。notify
,但我认为这不是您应该做的事情。您误用了DispatchGroup
。它不是为使一个异步任务同步而设计的。不要返回
这样,您正在使用异步调用,为什么要使其同步?通常,这是个坏主意。您确定吗那?为什么不改为func-yourFunc(completion:((String)->Void))
呢?returnSomeValue()
的代码调用了什么?从技术上讲,我认为你可以group.wait()
而不是组。通知
,但我认为你不应该这样做。你滥用了调度组
。它不是为使一个异步任务同步而设计的。