Ios Swift表达式类型含糊不清,没有更多上下文 请考虑以下代码: 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) } } }

Ios Swift表达式类型含糊不清,没有更多上下文 请考虑以下代码: 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) } } },ios,swift,Ios,Swift,联机:return(true,nil)编译器向我抛出一个错误:Expression type'(u,u)'在没有更多上下文的情况下是不明确的 我做错了什么?你需要的是 func checkIfNewVersionAvailable(@escaping completion : ((isNewAvailable : Bool, error : String?) -> ())) { DispatchQueue.global().async { do {

联机:return(true,nil)编译器向我抛出一个错误:
Expression type'(u,u)'在没有更多上下文的情况下是不明确的

我做错了什么?

你需要的是

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
的调用是不同步的,因为返回语句是同步的,因此即使您设法以某种方式编写了返回语句,在返回时也不会有正确的值,因为
self.isUpdateAvailable
在返回时可能仍在运行或等待运行已执行。

谢谢,但我不想添加闭包,我想返回元组。@EvgeniyKleban是的,您想/必须使用闭包。您不能将异步任务的结果用作函数的返回值。那是不可能的。在Swift 3+中,参数标签是无用的。您无法返回主队列,这没有任何意义,该方法的调用在逻辑上如何发生?@luk2302谢谢you@vadian谢谢你是什么意思-参数标签在Swift 3中是无用的?你是说在元组中?我的意思是省略闭包中的参数标签并返回值,如
->(Bool,String?
完成:(Bool,String?)->()