繁体   English   中英

如何在Swift中获取泛型参数的运行时类型的全限定名?

[英]How can I get the fully qualified name of the runtime type of a generic parameter in Swift?

例如,

func inject<P, D>(params: P, create: P -> D) {
    let type = String(D)
    // etc.
}

上面的技术似乎适用于任何 Swift类型(包括协议),但是不幸的是, type不包含模块名称,仅包含类型本身。 换句话说,如果DWatusiWatusiZing模块中,则我需要Zing.Watusi ,而不仅是Watusi

有谁知道如何获取作为通用参数传递的任何 Swift类型的整个墨西哥卷饼?

最终,此操作的目的是使用完全限定的类型作为此依赖关系解析程序实现中的键。

注意:以下是Anton Bronnikov的出色建议。 这是我所知道的,但我需要澄清一下,我需要一个公共 API,否则该应用将被拒绝,我的客户将不满意。

我认为您可以通过以下方式更接近您想要的:

func inject<P, D>(params: P, create: P -> D) {
    let type = _stdlib_getDemangledTypeName(D)
    // etc.
}

上面将产生几乎所有您想要的字符串,除了最后加上“不必要的” .Type

答案是String(reflecting: D.self) ,其中D是类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM