2015-10-31 52 views
7

是否有任何方法将Swift类型名称作为具有其名称空间(或框架名称)的字符串?如何使用其名称空间(或框架名称)作为字符串获得Swift类型名称

例如,如果Foo.framework有一个名为Bar的类,我想要得到类似于"Foo.Bar"的字符串。

以下只是返回类名称"Bar"

let barName1 = String(Bar.self)  // returns "Bar" 
let barName2 = "\(Bar.self)"   // returns "Bar" 
let barName3 = "\(Bar().dynamicType)" // returns "Bar" 

我想也得到框架名称"Foo"作为命名空间。

回答

15

使用String(reflecting:)

struct Bar { } 

let barName = String(reflecting: Bar.self) 
print(barName) // <Module>.Bar 

Xcode 7 Release Notes

类型名称和枚举案件现在打印,并转换为字符串,而不 资格默认。 debugPrintString(reflecting:)仍然可以使用 来获取完全限定名称。

+0

谢谢您参考发行说明的答案。我记得之前的类型名称是用它的模块名称打印的,但我不确定我的记忆是否正确。我很欣赏你告诉我String初始化器改变了它的默认行为。 –

相关问题