2015-10-31 21 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:)Xcode 7 Release Notesから

struct Bar { } 

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

タイプ名と列挙型のケースは今印刷して、デフォルトで 資格なしでStringに変換します。 debugPrintまたはString(reflecting:)でも、完全修飾名を取得するために を使用できます。

+0

リリースノートも参照していただきありがとうございます。以前はモジュール名で型名が印刷されていたことを思い出しましたが、私の記憶が正しいかどうかは分かりませんでした。 String初期化子がデフォルトの動作を変更したことを教えてくれてありがとう。 –

関連する問題