ios - 无法将类型 '(_) -> ()' 的值分配给类型 '((String, String, String, Int) -> ())?'

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

错误:

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/

相关文章:

ios - 有 2 个容器 View 。需要将一个更改为不同的 View Controller

swift - 如何使用 AVFoundation 制作视频填充框

swift - 构造函数图表 Swift 3 上没有 x 值的 LineChartData

ios - React native 人脸检测对我不起作用(iOS)

android - iOS 和 Android 上的 GPS 位置

iOS 8 - 无法安装企业应用程序

ios - 我有带导航的 1x、2x、3x 图像的图标

iphone - 关于在 iOS 和 Android 上开发多人游戏的建议?

ios - Swift 中的条纹

swift - LTMorphingLabel Swift4 错误