2017-02-07 14 views
2

名前でクラスを取得できますか?例:名前でクラスを取得する

class Foo { 

} 

class Bar { 

} 

let x = "Foo" 
classByString(x) // need to return Foo 

コードのメンテナンスを減らすためにメタプログラミングを使用したいと考えています。

+0

一定のファイルを作成し、その中に一定の変数で、すべてのクラス名を書き、あなたは一度書いて、任意の時間を使用する必要があります。 –

+0

@ジャッキーありがとうございますが、忘れないように新しいクラスを追加するときはゼロメンテナンスが必要です – Macabeus

+0

@Jacky RubyとPythonで作れるのですが、スウィフトで可能かどうか知りたいです – Macabeus

答えて

2

あなたはNSClassFromStringを使用することができます。

if let anyObj : AnyObject.Type = NSClassFromString("MyAppName.MySwiftClassFoo") { 
    //call Foo 
} else { 
    //call Bar 
} 
0

このようなメソッドを同じクラスに記述する必要があります。コードで説明したように、クラス名を渡すだけで済みます。

func classByString(_ strClassName: String) -> String? { 
    if strClassName == self.debugDescription.components(separatedBy: ".")[1].components(separatedBy: ":")[0] { 
     print("class name :- \(strClassName)") 
     return strClassName 
    } else { 
     return nil 
    } 
} 
関連する問題