Llamar a presentViewController desde una class personalizada

Leí esta publicación y esta sobre cómo llamar a un formulario presentViewController fuera de una subclass UIViewController. En mi caso, la class personalizada es una subclass de NSObject. El siguiente enfoque es el único que funciona (de los ejemplos que leí):

UIApplication.shanetworkingApplication().keyWindow?.rootViewController?.presentViewController(alertController, animated: true, completion: nil) 

Mi pregunta: ¿hay una solución mejor que no se base en la aplicaciónDelegate (como entendí que este enfoque no es muy elegante en términos de layout) …

A veces creo una class de utilidades para mostrar alertas y tal. Lo que suelo hacer es tener mis methods para presentar los controlleres de vista que toman el controller de vista actual como un parámetro. Ese enfoque funciona bastante bien.

EDITAR:

Aquí hay un método de ejemplo de un file Utils.swift en uno de mis proyectos. Define una function de class que muestra una alerta UIAlertController en el controller de vista actual:

 class Utils { static let shanetworkingUtils = Utils() class func showAlertOnVC( targetVC: UIViewController, var title: String, var message: String) { title = NSLocalizedString(title, comment: "") message = NSLocalizedString(message, comment: "") let alert = UIAlertController( title: title, message: message, prefernetworkingStyle: UIAlertControllerStyle.Alert) let okButton = UIAlertAction( title:"OK", style: UIAlertActionStyle.Default, handler: { (alert: UIAlertAction!) in }) alert.addAction(okButton) targetVC.presentViewController(alert, animated: true, completion: nil) } } 

El código anterior define una class Utils. Tenga en count que no tiene ninguna class base, que está Ok en Swift.

A continuación, define una variable estática pública shanetworkingUtils que puede usar para get acceso a la class singleton Utils.

Finalmente, define un método de class showAlertOnVC que se puede usar para mostrar una alerta UIAlertController sobre el controller de vista actual. Para usar showAlertOnVC puede llamarlo desde el controller de vista actual y pasar a uno mismo como el parámetro targetVC .

Esto, en mi opinión, es la solución más fácil:

 class Utils { static func displayTheAlert(targetVC: UIViewController, title: String, message: String){ let alert = UIAlertController(title: title, message: message, prefernetworkingStyle: UIAlertControllerStyle.Alert) alert.addAction((UIAlertAction(title: "OK", style: .Default, handler: {(action) -> Void in }))) targetVC.presentViewController(alert, animated: true, completion: nil) } } 

// luego para llamarlo

 Utils.displayTheAlert(self, title: "Fout", message: "Uw bestelling is nog niet klaar") 

Desde el punto de layout de View, no es recomendable que la class de model (NSObject) interactúe directamente con View. No se ajusta al patrón MVC. Evite usar UIKIT en la class NSObject.