首页 > 解决方案 > 无法调用非函数类型“闭包名称”的值

问题描述

我定义了一个名为的闭包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)
    }
}

请帮我修复它。

标签: swiftclosures

解决方案


你必须解开可选的

self.touchBlock!(nil, touches, event)

或者最好使用可选绑定

if let block = self.touchBlock {
   block(nil, touches, event) ...

但是考虑到传递的参数根本不匹配闭包的类型(view并且event是非可选的并且类型touches完全不同)。


推荐阅读