swiftでクラス名からインスタンスを生成する方法


swiftに関して質問です。  
自作したクラスのインスタンスを生成する方法として、通常は下記のように生成できます。

[code]

    let vc = HogeViewController()
    
[/code]

ここで、自作したクラスを **HogeViewController** とした時、これを **文字列(String型)から生成する**
場合にどうすればいいかわかりません。どなたかご教授頂けないでしょうか。

下記は理想なのですが、エラーになります。

[code]

    let strVC:String = "HogeViewController"
    let cls:AnyClass = NSClassFromString(strVC)
    let vc:AnyObject = cls()            // この行でエラー
    
[/code]

※エラー文

> ‘AnyObject’ cannot be constructed because it has no accessible initializers

実際に使用する場合にはクラス名の文字列は固定値ではなく、動的に変化する予定です。  
よって、特定の自作クラスでキャストすることは想定していません。  
コンストラクタはデフォルトを想定しています。  
なお、Objective-Cの場合は下記でできます。

[code]

    NSString* strVC = @"HogeViewController";
    Class cls = NSClassFromString(strVC);
    id vc = [[cls alloc] init];
    
[/code]

よろしくお願いいたします。




以下で動作することを確認しました。  
ポイントは、`@objc` をつけることと、 `class Foo : NSObject` で NSObject を継承していることです。（継承するのは
NSObject から継承したクラスでも大丈夫です）

[code]

    @objc(Foo)
    class Foo : NSObject {
        func bar() {
            println("bar")
        }
    }
    
    var cls:NSObject.Type = NSClassFromString("Foo") as NSObject.Type
    var foo:Foo = (cls() as Foo)
    foo.bar()    // -> `bar` が出力される
    
[/code]




以下で動作することを確認しました。  
ポイントは、`@objc` をつけることと、 `class Foo : NSObject` で NSObject を継承していることです。（継承するのは
NSObject から継承したクラスでも大丈夫です）

[code]

    @objc(Foo)
    class Foo : NSObject {
        func bar() {
            println("bar")
        }
    }
    
    var cls:NSObject.Type = NSClassFromString("Foo") as NSObject.Type
    var foo:Foo = (cls() as Foo)
    foo.bar()    // -> `bar` が出力される
    
[/code]

