例如,
func inject<P, D>(params: P, create: P -> D) {
let type = String(D)
// etc.
}
上面的技术似乎适用于任何 Swift 类型(包括协议(,但不幸的是type
不包含模块名称,只包含类型本身。换句话说,如果D
是Watusi
并且Watusi
在Zing
模块中,我想要Zing.Watusi
,而不仅仅是Watusi
。
有人知道如何为作为通用参数传递的任何 Swift 类型获取整个玉米卷饼吗?
最终,这样做的目的是将完全限定类型用作此依赖项解析程序实现中的键。
注意:安东·布朗尼科夫在下面提出了一个很好的建议。这是我所知道的,但我应该澄清一下,我需要一个公共 API,否则应用程序将被拒绝,我的客户会不满意。
我认为你可以通过以下方式更接近你想要的:
func inject<P, D>(params: P, create: P -> D) {
let type = _stdlib_getDemangledTypeName(D)
// etc.
}
上面将产生几乎你想要的字符串,除了最后的"不必要的".Type
。
答案是 String(reflecting: D.self)
,其中 D
是一种类型。