是否可以做这样的事情,并创建一个以后可以分配的空函数,因为我不断收到错误,我无法调用已分配的函数,这是我得到的最接近的
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()时我得到的不能调用非函数类型
答案 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
然后在分配时可以调用它。