2017-07-17 37 views
1

的XCode 9,β3斯威夫特4.Swift 4:无法赋值类型'(_) - > Void'来键入'(( - )())?'

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

获取错误:无法分配类型的值'(_) - >虚空为键入'(() - >())?

+0

“button”是什么类型?它看起来像属性期望无参数闭包。你可以尝试'button.clickAction = {action(); ''? –

+0

已修改。这有效,想提供一个答案? – Esqarrouth

+0

我加了一个答案 –

回答

3

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

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

我不知道这些功能的API任何东西(你从来没有告诉我们,他们是什么),但这里是什么错误告诉你:

Cannot assign value of type

它引用参数传递,这是一个“赋值”的种类

'(_) -> Void'

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

to type '(() ->())?'

这是这个参数的预期类型。它没有参数(()),它返回(->Void()),它的可选((...)?

所以,问题是,你传递一个截流用的参数作为参数传递给期望一个参数无参数闭包。

0

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

相关问题