Swift表达式是没有更多上下文的ambigious

时间:2017-11-10 08:35:01

标签: 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)
            }
        }
    }

在线:return(true,nil)编译器给我一个错误:Expression type '(_, _)' is ambiguous without more context

我做错了什么?

1 个答案:

答案 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可能仍在运行或等待你的回报被执行时运行。