我想返回从 HelperConnection.shared.getInfo() 计算的结果。但我总是在结果变量中得到 nil(也在 group.wait 之后)。如何在 HelperConnection.shared.getInfo() 完成之前停止当前函数的执行?
func install(lists:[String]) {
let group = DispatchGroup()
var result : String!
if lists.count != 0 {
for i in lists {
group.enter()
HelperConnection.shared.getInfo(str: i, completion: { (str) in
if str == "1" {
DispatchQueue.main.async {
result = str
group.leave()
}
} else {
DispatchQueue.main.async {
result = "Hello"
group.leave()
}
}
})
}
}
print(result)
print(".........")
group.wait(timeout: .now() + 5)
print(result)
return result
}
最佳答案
使用notify
而不是wait
并添加完成处理程序。强制异步任务同步是不好的做法。
func install(lists:[String], completion: @escaping: (String)->Void) {
let group = DispatchGroup()
var result = ""
if lists.isEmpty { (completion("")) }
for i in lists {
group.enter()
HelperConnection.shared.getInfo(str: i, completion: { str in
defer(group.leave())
if str == "1" {
result = str
} else {
result = "Hello"
}
})
}
group.notify(queue: DispatchQueue.main) {
print(".........")
print(result)
completion(result)
}
}
关于ios - 函数在完成处理程序完成之前完成它的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54288228/