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))