Obtenga el ViewController superior en iOS Swift

Quiero implementar una clase separada de ErrorHandler, que muestra mensajes de error en ciertos eventos. El comportamiento de esta clase debe llamarse desde otras clases diferentes. Cuando ocurre un error, tendrá unUIAlertView como salida La visualización de este AlertView SIEMPRE debe estar en la parte superior. Entonces, sin importar desde dónde se arroje el Error, la vista superior El Controlador debe mostrar el Mensaje de Alerta (por ejemplo, cuando falla un proceso de fondo asíncrono, quiero un mensaje de error, sin importar qué Vista se muestre en primer plano).

He encontrado varias claves que parecen resolver mi problema (vea el código a continuación). Pero llamandoUIApplication.sharedApplication().keyWindow?.visibleViewController() devuelve un valor nulo.

Extensión desde la esencia

extension UIWindow {
func visibleViewController() -> UIViewController? {
if let rootViewController: UIViewController  = self.rootViewController {
  return UIWindow.getVisibleViewControllerFrom(rootViewController)
}
return nil
}

class func getVisibleViewControllerFrom(vc:UIViewController) -> UIViewController {

if vc.isKindOfClass(UINavigationController.self) {

  let navigationController = vc as! UINavigationController
  return UIWindow.getVisibleViewControllerFrom( navigationController.visibleViewController)

} else if vc.isKindOfClass(UITabBarController.self) {

  let tabBarController = vc as! UITabBarController
  return UIWindow.getVisibleViewControllerFrom(tabBarController.selectedViewController!)

} else {

  if let presentedViewController = vc.presentedViewController {

    return UIWindow.getVisibleViewControllerFrom(presentedViewController.presentedViewController!)

  } else {

    return vc;
  }
}
}
}