调度组通知内函数的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
is
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")
    }
}

返回内部的
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()
而不是
组。通知
,但我认为你不应该这样做。你滥用了
调度组
。它不是为使一个异步任务同步而设计的。