如,
func inject<P, D>(params: P, create: P -> D) {
let type = String(D)
// etc.
}
上述技术似乎适用于任何 Swift类型(包括协议),但不幸的是type
不包含模块名称,只包含类型本身。换句话说,如果D
Watusi
Watusi
和Zing
位于Zing.Watusi
模块中,我需要Watusi
,而不仅仅是{{1}}。
任何人都知道如何获取整个辣酱玉米饼馅,任何 Swift类型作为通用参数传递?
最终,这样做的目的是将完全限定类型用作此dependency resolver implementation中的键。
注:Anton Bronnikov在下面提出了一个很好的建议。这是我所知道的,但我应该澄清一下,我需要一个 public API,否则该应用将被拒绝,我的客户将不满意。
答案 0 :(得分:1)
我认为你可以更接近你想要的东西:
func inject<P, D>(params: P, create: P -> D) {
let type = _stdlib_getDemangledTypeName(D)
// etc.
}
上面几乎会产生你想要的字符串,除了&#34;不必要的&#34;最后.Type
。
答案 1 :(得分:0)
答案是String(reflecting: D.self)
,其中D
是一种类型。