Extensión UIViewController para crear instancias del guión gráfico

Estoy tratando de escribir una pequeña extensión en Swift para manejar la creación de instancias de unUIViewController de un guión gráfico.

Mi idea es la siguiente: desdeUIStoryboardmétodo deinstantiateViewControllerWithIdentifier necesita un identificador para crear una instancia del controlador de vista de un guión gráfico dado, ¿por qué no asignar a cada controlador de vista en mi guión gráfico un identificador igual a su nombre de clase exacto (es decir, unUserDetailViewController tendría un identificador de "UserDetailViewController") y crearía un método de clase en UIViewController que:

aceptar unUIStoryboard instancia como un parámetro únicoobtener el nombre de la clase actual como una cadenallamadainstantiateViewControllerWithIdentifier en la instancia del guión gráfico con el nombre de la clase como parámetroobtener el recién creadoUIViewController instancia, y devolverlo

Entonces, en lugar de (que repite el nombre de la clase como una cadena, no es muy agradable)

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

podría ser:

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

Solía hacerlo en Objective-C con la siguiente categoría:

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

Pero estoy completamente atrapado con la versión Swift. Espero que haya algún tipo de forma de hacerlo. Intenté lo siguiente:

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

VolviendoSelf en lugar deAnyObject permite que la inferencia de tipos funcione. De lo contrario, tendría que emitir cada retorno de este método, lo cual es molesto, pero ¿quizás tenga una mejor solución?

Esto me da el error:Use of unresolved identifier 'Self' losNSStringFromClass parte parece ser el problema.

¿Qué piensas?

¿Hay alguna manera de regresar?Self de las funciones de clase?

¿Cómo conseguirías que esto funcione sin la necesidad de emitir el valor de retorno cada vez? (es decir, mantener-> Self como valor de retorno)

Gracias.

Respuestas a la pregunta(10)

Su respuesta a la pregunta