是否可以在Swift中将空函数声明为变量?
有没有可能这样做,并创建一个空函数,以后可以分配,因为我不断得到一个错误,我不能调用分配的函数,这是我得到的最接近的一个是否可以在Swift中将空函数声明为变量?,swift,swift3,Swift,Swift3,有没有可能这样做,并创建一个空函数,以后可以分配,因为我不断得到一个错误,我不能调用分配的函数,这是我得到的最接近的一个 fileprivate class actionButton: UIButton{ var functo = () func tapped(functoCall: () ->Void){ self.functo() } } 此按钮在函数中初始化,该函数将函数作为参数,并将其传递给此按钮,此按钮是上述指定类的后代 butt
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
然后,当您分配它时,它是可调用的。您通常只需将
functo
定义为闭包,因为它还没有任何内容,所以它将是可选的,例如var functo:(()->Void)?
。或者,如果您不需要告诉它是否为nil
,您可以给它一个不做任何事情的函数的默认值,例如var funco={}
(它将被推断为()->Void
),而不是将myfunc
定义为Any
,您应该使用示例将其声明为()->String
。这样,就不需要强制转换。我的示例是人为的。如果您知道签名upfornt,当然可以将函数存储在这样一个类型化变量中。我的印象不是这个问题。我的示例应该说明,可以将任意函数存储在变量中,然后调用它。