无法指定类型'(_) - >的值()'to type'((String,String,String,Int) - >())?'

时间:2017-06-19 06:48:34

标签: ios swift swift4

我有一个像这样定义的闭包,

public var onLogCompletion:((_ printLog:String,_ fileName:String,_ functionName:String,_ lineNumber:Int) -> ())? = nil

这是更新的,

fileprivate func printerCompletion(printLog:String, fileName:String, functionName: String, lineNumber:Int) -> Void {
    if onLogCompletion != nil {
        onLogCompletion!(printLog, getFileName(name: fileName), functionName, lineNumber)
    }
}

像这样使用它,

    Printer.log.onLogCompletion = { (log) in
        //print(log)
        //print(log.0)
    }

错误:

  

无法指定类型'(_) - >的值()'to type'((String,String,String,Int) - >())?'

但是这给了我上面的错误,不知道该怎么办?

同样适用于Swift 3.x。

1 个答案:

答案 0 :(得分:2)

它在Swift 4中不起作用的原因是Distinguish between single-tuple and multiple-argument function types(SE-0110)

如果你仍然希望以一种在Swift 3中工作的方式工作,那么你需要将函数类型的参数列表设置为Double parentheses,如下所示。

public var onLogCompletion:(((String,String,String,Int)) -> ())? = nil

现在你们都准备去了

Printer.log.onLogCompletion = { (log) in
    //print(log)
    //print(log.0)
}