Получите лучший ViewController в iOS Swift

Я хочу реализовать отдельный класс ErrorHandler, который отображает сообщения об ошибках при определенных событиях. Поведение этого класса следует вызывать из других классов. Когда происходит ошибка, она будет иметьUIAlertView в качестве вывода. Отображение этого AlertView ВСЕГДА должно быть сверху. Таким образом, независимо от того, откуда выдается ошибка, самый верхний viewController должен отображать AlertMessage (например, когда происходит сбой асинхронного фонового процесса, я хочу сообщение об ошибке, независимо от того, какой View отображается на переднем плане).

Я нашел несколько суть, которые, кажется, решить мою проблему (см. Код ниже). Но зоветUIApplication.sharedApplication().keyWindow?.visibleViewController() действительно возвращает ноль-значение.

Расширение от сущности

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;
  }
}
}
}

Ответы на вопрос(2)

Ваш ответ на вопрос