swift - 无法调用非函数类型“闭包名称”的值
问题描述
我定义了一个名为的闭包touchBlock
,并在其中使用它override func touchesEnded
,然后我得到一个错误:
不能调用非函数类型的值'((ELControl,UIEvent,UIEvent)-> Void?)?
这是我的代码:
var touchBlock: ((_ view: ELControl, _ touches: UIEvent, _ event: UIEvent) -> Void?)?
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
if self.touchBlock != nil {
self.touchBlock(nil, touches, event)
} else {
super.touchesEnded(touches, with: event)
}
}
请帮我修复它。
解决方案
你必须解开可选的
self.touchBlock!(nil, touches, event)
或者最好使用可选绑定
if let block = self.touchBlock {
block(nil, touches, event) ...
但是考虑到传递的参数根本不匹配闭包的类型(view
并且event
是非可选的并且类型touches
完全不同)。