2015-10-31 90 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初始化器改變了它的默認行爲。 –

相關問題