我正在尝试在Swift中实现路由器模式,但无法弄清楚如何动态调用方法。
例如,有一组参数:
let arguments: [Any] = [100, 0.5, "Test"]
需要调用的处理程序:
public class MyClass {
public func handler(value1: Int, value2: Double, text: String) {
print("int=\(value1), double=\(value2), string=\(text)")
}
}
let myClass = MyClass()
路由器有一个无类型的函数引用,它将用作回调函数:
let callback: Any = myClass.handler
如何将上面数组中的参数映射到函数参数?
我发现处理程序的参数类型可以通过反射获得:
reflect(myClass.handler).valueType // upd: or myClass.handler.dynamicType
is
(Swift.Int, Swift.Double, Swift.String) -> ()
我不知道如何迭代参数类型,甚至不知道如何计算。可能我可以将其解析为字符串然后使用NSInvocation来调用该方法。由于NSInvocation在Swift中不可用,因此需要使用Objective C辅助函数。另一个缺点是它不适用于全局函数和闭包。
非常欢迎任何其他想法。