是否可以做这样的事情,并创建一个稍后可分配的空函数,因为我不断收到错误,无法调用分配的函数,这是我得到的最接近的函数
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() 时,我无法调用非函数类型
最佳答案
是的,这是可能的。
您收到错误的原因是编译器无法知道 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()
}
如果问题只是针对这个问题(正如反对者所认为的那样),您只需输入带有函数签名的变量即可。这是一个简单的案例:
var myfunc: ((Any) -> Void)? = nil
然后当你分配它时它是可调用的。
关于swift - 是否可以在 Swift 中将空函数声明为变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44313123/