UIViewController のサブクラスに関する質問です。

Objective-C では [[FooViewController alloc] init] で FooViewController.xib を読み込んで ViewController を初期化できました。
Swift でも同じことがしたいのですが、FooViewController() でオブジェクトを作っても FooViewController.xib が読み込まれないようです。

最初に以下のようにやってみたのですが、super.init を呼ぶ前に self が使えないというエラーが出て無理でした。

convinience override init() {
    let fullName = NSStringFromClass(self.dynamicType)
    let className = split(fullName){$0 == "."}.last

    super.init(nibName: className, bundle: nil)
}

以下のように init でloadNibNamedをすれば一応できるのですが、viewDidLoad を自分で呼び出すのは邪悪なので無理でした。

override init() {
    super.init()

    let fullName = NSStringFromClass(self.dynamicType)
    let className = split(fullName){$0 == "."}.last

    NSBundle.mainBundle().loadNibNamed(className, owner: self, options: nil)
    viewDidLoad()
}

他には以下のように、xibを元に ViewController を作る関数も考えてみましたが、グローバル関数にするのもクラス関数にするのも微妙です。

func viewController<T: UIViewController>(type: T.Type) -> T {

    let fullName = NSStringFromClass(T)
    let className = split(fullName){$0 == "."}.last
    let controller = T(nibName: className, bundle: nil)

    return controller as T
}

// viewController(FooViewController) でオブジェクト作成

何かもっといい方法があれば教えて下さい。