请考虑以下代码:
func checkIfNewVersionAvailable() -> (isNewAvailable : Bool, error : String?){
DispatchQueue.global().async {
do {
let update = try self.isUpdateAvailable()
DispatchQueue.main.async {
return (true, nil)
}
} catch {
print(error)
return (false, error)
}
}
}
在线:return(true,nil)编译器给我一个错误:Expression type '(_, _)' is ambiguous without more context
我做错了什么?
答案 0 :(得分:3)
您需要的是
func checkIfNewVersionAvailable(@escaping completion : ((isNewAvailable : Bool, error : String?) -> ())) {
DispatchQueue.global().async {
do {
let update = try self.isUpdateAvailable()
DispatchQueue.main.async {
completion(true,nil)
}
} catch {
print(error)
completion(false,error)
}
}
}
现在问题:
DispatchQueue.main.async不期望任何返回值,并且您正在尝试返回类型(bool,String)的元组,因此它提到了问题
谢谢,但我不想添加闭包,我想要返回元组。
您正在使用默认优先级的全局队列异步执行self.isUpdateAvailable
。所以对self.isUpdateAvailable
的调用并不是同步的,因为你的return语句是同步的,因此即使你设法写return语句,你也会在返回时没有正确的值,因为self.isUpdateAvailable
可能仍在运行或等待你的回报被执行时运行。