gpt4 book ai didi

swift - 在继续之前先执行函数

转载 作者:行者123 更新时间:2023-11-30 10:47:48 25 4
gpt4 key购买 nike

基本上我有一个功能。我还有另一个具有完成处理程序的函数。在继续第一个函数的行之前,我想要第二个函数的结果。我尝试了调度组,但它不起作用。

    func parseData(from json: [String: Any) -> Val {
var a //some values I got from parsing that I NEED for B
var anotherVariable
B(a) { result in
anotherVariable = result
}
var otherVar = anotherVariable[0]
return Val(a, anotherVariable, otherVar) // this is a struct
//returned
}

func B(_ a: a, completion: @escaping ([Res]) -> Void) {
let group = DispatchGroup()
var res = [Res]()

SomeotherFunc(a, completion: { resp in
res = resp
group.leave()
})
group.notify(queue: .main) {
completion(res)
}
}

最佳答案

不要那样做。

请了解异步数据处理的工作原理,并在 parseData 中添加另一个完成处理程序。并且您在 B 中滥用了 DispatchGroup。顾名思义,它仅对异步调用有用,例如在循环中

func parseData(from json: [String: Any], completion: @escaping (Val) -> Void) {
var a //some values I got from parsing that I NEED for B
var anotherVariable
B(a) { result in
anotherVariable = result
completion(Val(a, anotherVariable, anotherVariable[0]))
}
}

func B(_ a: a, completion: @escaping ([Res]) -> Void) {
var res = [Res]()

SomeotherFunc(a) { resp in
res = resp
completion(res)
})
}

关于swift - 在继续之前先执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55390198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com