Ios 从方法签名中获取参数类型(镜像/反射/内省?)

Ios 从方法签名中获取参数类型(镜像/反射/内省?),ios,swift,Ios,Swift,我试图在编译时计算函数的签名。给定一个函数,我想把类型s取出来 例如: func f(a: Int, b: Int) -> Int{ return 1 } let y = Mirror(reflecting: f) let types = y.subjectType print(types) 我回来了: "(Int, Int) -> Int" 这就是我需要的——字符串形式!我需要打印出来。预期用途: let unknownA: AnyObject = 1 let unk

我试图在编译时计算函数的签名。给定一个函数,我想把
类型
s取出来

例如:

func f(a: Int, b: Int) -> Int{
    return 1
}

let y = Mirror(reflecting: f)
let types = y.subjectType
print(types)
我回来了:

"(Int, Int) -> Int"
这就是我需要的——字符串形式!我需要打印出来。预期用途:

let unknownA: AnyObject = 1
let unknownA: AnyObject = 2

// The casts (here 'Int') are derived from the mirror above
f(a: Int(unknownA), b: Int(unknownB))

编辑:啊哈!经过一整天的挖掘,我找到了宝石。当我让它工作时,我会发布一个工作示例

我没有找到任何通过反射获取函数参数类型的方法

“\(y.subjectType)”
提供函数类型的字符串表示:
(Int,Int)->Int
。因此,您可以解析它并获取参数类型名称数组
[“Int”,“Int”]

因此,您可以调用您的函数:

f(typeMap[paramsTypes[0]](unknownA), b: typeMap[paramsTypes[1]](unknownB))

这也是我所能做到的。处理带有任意数量参数的函数不会很顺利,但我会坚持下去。谢谢这很有创意,但我们真的需要真正的反思,有人说,Swift 4即将推出。
let typeMap = ["Int": Int.self]
f(typeMap[paramsTypes[0]](unknownA), b: typeMap[paramsTypes[1]](unknownB))