是否可以在Swift中将空函数声明为变量?

时间:2017-06-01 16:50:00

标签: swift swift3

是否可以做这样的事情,并创建一个以后可以分配的空函数,因为我不断收到错误,我无法调用已分配的函数,这是我得到的最接近的

fileprivate class actionButton: UIButton{
    var functo = ()
    func tapped(functoCall: () ->Void){
        self.functo()
    }
}

这个按钮在一个函数中初始化,该函数将函数作为参数并将其传递给此按钮,该按钮是上面指定的类的后代

    button.functo = funcToCall()
    button.addTarget(self, action: #selector(yes.tapped(functoCall:)), for: .touchDown)

我得到的问题是当我尝试调用self.functo()时我得到的不能调用非函数类型

1 个答案:

答案 0 :(得分:0)

是的,这是可能的。

您收到错误的原因是编译器无法知道functo实际上是一个可调用的函数。你隐含地使它Any

你必须先将它(例如使用if let)强制转换为所需类型的函数。

这样的事情应该让你开始:

var myfunc: Any = ()

func test() -> String {
    return "Cool"
}
// Assign any function to myfunc
myfunc = test

// Just cast it to the expected type
if let x = myfunc as? ()->String {
    x()
}

如果问题仅针对此问题(正如downvoter所认为的那样),您只需使用函数的签名键入变量即可。这是一个小问题:

var myfunc: ((Any) -> Void)? = nil

然后在分配时可以调用它。