gpt4 book ai didi

ios - 从方法签名中获取参数类型(镜像/反射/自省(introspection)?)

转载 作者:搜寻专家 更新时间:2023-10-31 23:01:49 25 4
gpt4 key购买 nike

我试图在编译时评估函数的签名。给定一个函数,我想得到 Type

例如:

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

编辑:啊哈哈!经过一整天的挖掘,我发现了 this gem 。当我让它工作时,将发布一个工作示例。

最佳答案

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

"\(y.subjectType)" 为您提供函数类型的字符串表示形式:(Int, Int) -> Int。所以你可以解析它并获取参数类型名称数组 ["Int", "Int"]:

let params = "\(y.subjectType)".componentsSeparatedByString(" -> ")[0]
let paramsTypes = params.substringWithRange(Range<String.Index>(start: params.startIndex.successor(), end: params.endIndex.predecessor())).componentsSeparatedByString(", ")

我也没有找到从类型名称获取 Swift 类型的方法,但是如果您的函数中使用了固定数量的类型,那么您可以创建一个将类型名称映射到类型的字典:

let typeMap = ["Int": Int.self]

所以你可以调用你的函数:

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

关于ios - 从方法签名中获取参数类型(镜像/反射/自省(introspection)?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32816414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com