Swift 4:无法指定类型的值'(_) - >虚空'输入'(() - >())?'

时间:2017-07-17 18:10:12

标签: swift closures

XCode 9,Beta 3. Swift 4。

    let button = JumpingButton(x: 0, y: 50, w: 150, h: 300) // JumpingButton: UIButton
    //Inside JumpingButton: // var clickAction: (() -> ())?


    button.clickAction = { (sender) -> Void in //Error line
        action()
        Sound.playSound(Sounds.Button)
    }

获取错误:无法指定类型的值'(_) - >虚空'输入'(() - >())?'

4 个答案:

答案 0 :(得分:6)

因为clickAction需要一个无参数的函数/闭包。只需将您的代码更改为:

button.clickAction = {
    action()
    Sound.playSound(Sounds.Button)
}

答案 1 :(得分:3)

我对这些功能的API一无所知(你从来没有告诉我们它们是什么),但这里的错误告诉你:

  

无法指定类型

的值

它指的是参数传递,这是一种"赋值"

  

'(_) - >空隙'

这是您为参数指定的参数的类型。它有一些未知类型(_)的参数,并返回(->Void

  

键入'(() - >())?'

这是此参数所需的参数类型。它没有参数(()),它返回(->Void()),并且它是可选的((...)?

所以问题在于你将一个带参数的闭包作为参数传递给一个期望无参数闭包的参数。

答案 2 :(得分:0)

在我看来,你的编辑有你的答案:封闭类型是() - > (),但是你提供了一个参数。

答案 3 :(得分:0)

我有一个类似的问题,我这样解决了:

button.clickAction = { _ in
        action()
        Sound.playSound(Sounds.Button)
    }

希望它对您有帮助。