我有一个这样定义的闭包,
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)
}
错误:
Cannot assign value of type '(_) -> ()' to type '((String, String, String, Int) -> ())?'
但这给了我上述错误,并且不知道该怎么办?
在 Swift 3.x 上同样可以正常工作。
最佳答案
它在 Swift 4 中不起作用的原因是 Distinguish between single-tuple and multiple-argument function types(SE-0110)
.
如果您仍然想以 Swift 3 中的方式工作,则需要将函数类型的参数列表设置为用双括号
括起来,如下所示。
public var onLogCompletion:(((String,String,String,Int)) -> ())? = nil
现在一切准备就绪
Printer.log.onLogCompletion = { (log) in
//print(log)
//print(log.0)
}
关于ios - 无法将类型 '(_) -> ()' 的值分配给类型 '((String, String, String, Int) -> ())?',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44623916/