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: DesdeUIStoryboard
mé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:
UIStoryboard
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 retorneEntã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.