Extensão UIViewController para instanciar a partir do storyboard

Estou tentando escrever uma pequena extensão no Swift para lidar com a instanciação de umUIViewController de um storyboard.

Minha idéia é a seguinte: DesdeUIStoryboardmétodo deinstantiateViewControllerWithIdentifier precisa de um identificador para instanciar o controlador de exibição de um determinado storyboard, por que não atribuir a cada controlador de exibição no meu storyboard um identificador igual ao nome exato da classe (ou seja, umUserDetailViewController teria um identificador de "UserDetailViewController") e crie um método de classe no UIViewController que:

aceitar umUIStoryboard instância como um parâmetro exclusivoobter o nome da classe atual como uma stringligarinstantiateViewControllerWithIdentifier na instância do storyboard com o nome da classe como parâmetroobtenha o recém-criadoUIViewController instância e retorne

Então, em vez de (que repete o nome da classe como uma string, não é muito legal)

let vc = self.storyboard?.instantiateViewControllerWithIdentifier("UserDetailViewController") as UserDetailViewController

seria:

let vc = UserDetailViewController.instantiateFromStoryboard(self.storyboard!)

Eu costumava fazer isso no Objective-C com a seguinte categoria:

+ (instancetype)instantiateFromStoryboard:(UIStoryboard *)storyboard
{
    return [storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([self class])];
}

Mas estou completamente preso à versão Swift. Espero que haja algum tipo de maneira de fazer isso. Eu tentei o seguinte:

extension UIViewController {
    class func instantiateFromStoryboard(storyboard: UIStoryboard) -> Self {
        return storyboard.instantiateViewControllerWithIdentifier(NSStringFromClass(Self))
    }
}

RetornandoSelf ao invés deAnyObject permite que a inferência de tipo funcione. Caso contrário, eu teria que lançar cada retorno desse método, o que é irritante, mas talvez você tenha uma solução melhor?

Isso me dá o erro:Use of unresolved identifier 'Self' oNSStringFromClass parte parece ser o problema.

O que você acha?

Existe alguma maneira de voltarSelf das funções de classe?

Como você faria isso funcionar sem a necessidade de lançar o valor de retorno toda vez? (ou seja, mantendo-> Self como valor de retorno)

Obrigado.

questionAnswers(10)

yourAnswerToTheQuestion