当函数具有不同的签名时,将函数作为参数传递

时间:2017-08-03 09:36:16

标签: swift function methods

我得到了很多答案,但我无法找到对我的问题的确切答案。

在Swift中,我有3种(或更多种)不同的方法。他们唯一的共同点是他们的回归类型,例如

A(a:String)->MyType
B(a:Int,b:String,c:AnyObject,d:Whatever)->MyType
C(a:Int,b:String,c:Other)->MyType

我需要将函数作为类方法的参数传递,例如

myClass.configureIOTDevice(configFile:String, functionToCall:A)

然后,在我想要调用的方法体内:

functionToCall()

正如您所看到的,出现了一个问题:如何为不同的签名传递所需的参数?

任何帮助,提示,为什么不,腐烂的番茄是值得赞赏的: - )

1 个答案:

答案 0 :(得分:0)

你可以这样

func getData( functionToCall : Any) {
    if let function = functionToCall as? ()-> Void {
        function()
    }
    else if let function = functionToCall as? (String, String) -> Int {
        let result = function("a","b")
    }
}