Yoichi Yoichi - 2 months ago 9
Swift Question

How to get a Swift type name as a string with its namespace (or framework name)

Is there any way to get a Swift type name as a string with its namespace (or framework name)?

For example, if

Foo.framework
has a class named
Bar
, I would like to get a string something like
"Foo.Bar"
.

The followings just return the class name
"Bar"
.

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


I would like to also get the framework name
"Foo"
as a namespace.

Answer

Use String(reflecting:):

struct Bar { }

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

From the Xcode 7 Release Notes:

Type names and enum cases now print and convert to String without qualification by default. debugPrint or String(reflecting:) can still be used to get fully qualified names.