Ios 函数在完成处理程序完成之前完成它的执行
我想返回从HelperConnection.shared.getInfo()计算得出的结果。但我总是在结果变量中得到零(也是在group.wait之后)。如何在HelperConnection.shared.getInfo()完成之前停止当前函数的执行Ios 函数在完成处理程序完成之前完成它的执行,ios,swift,macos,cocoa,Ios,Swift,Macos,Cocoa,我想返回从HelperConnection.shared.getInfo()计算得出的结果。但我总是在结果变量中得到零(也是在group.wait之后)。如何在HelperConnection.shared.getInfo()完成之前停止当前函数的执行 func install(lists:[String]) { let group = DispatchGroup() var result : String! if lists.count != 0 {
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)
}
}
我在程序中包含了下面的代码。但是print语句没有被执行。group.notify(queue:DispatchQueue.main){print(result)}仅当
lists
为空时才执行该行。我检查了这一点。但我的名单不是空的。我在if列表上方添加了一个打印。I空。现在我得到的输出是[“user1”,“user2”]nil………我没有写完成(result)。我的函数定义是func install(list:[String]){}。HelperConnection.shared.getInfo
是否返回任何内容?