¿Cómo mostrar la alerta en todos los controlleres sin repetir el código?

Quiero escribir una function de alert() y ejecutarlo. Pero quiero mostrar esta alerta en cualquier controller sin repetir el código.

Por ejemplo: tengo class Presence.swift y aquí tengo alguna condición, como:

 if myVar == 1 { // Just for presenting runMyAlert() } 

y cuando está en segundo plano myVar == 1 usuario, independientemente del hecho de que esté donde esté, en qué pantalla, se pone alerta en la pantalla.

¿Cómo puedo hacerlo sin repetir mi código? Traté de hacerlo en AppDelegate como:

 func alert(title : String,message : String,buttonTitle : String,window: UIWindow){ let alert = UIAlertController(title: title, message: message, prefernetworkingStyle: UIAlertControllerStyle.Alert) alert.addAction(UIAlertAction(title: buttonTitle, style: UIAlertActionStyle.Default, handler: nil)) window.rootViewController?.presentViewController(alert, animated: true, completion: nil) } 

Y llámalo como:

 if myVar == 1 { AppDelegate().alert() } 

Desarrollando en Swift debes conocer los protocolos que pueden resolver tu problema fácilmente. Puede crear un nuevo protocolo MyAlert y realizar la implementación pnetworkingeterminada para la class UIViewController . ¡Y luego henetworkinge su protocolo MyAlert en el controller de vista, donde lo necesite, y llame a la function!

 protocol MyAlert { func runMyAlert() } extension MyAlert where Self: UIViewController { func runMyAlert() { let alert = UIAlertController(title: title, message: "message", prefernetworkingStyle: UIAlertControllerStyle.Alert) alert.addAction(UIAlertAction(title: "buttonTitle", style: UIAlertActionStyle.Default, handler: nil)) self.presentViewController(alert, animated: true, completion: nil) } } 

Entonces puedes implementar y llamar así:

 class MyViewController: UIViewController, MyAlert { override func viewDidLoad() { runMyAlert() // for test } } 

UPD:

codigo para su caso:

 protocol MyAlert { func runMyAlert() } extension MyAlert where Self: UIViewController { func runMyAlert() { let alert = UIAlertController(title: title, message: "message", prefernetworkingStyle: UIAlertControllerStyle.Alert) alert.addAction(UIAlertAction(title: "buttonTitle", style: UIAlertActionStyle.Default, handler: nil)) self.presentViewController(alert, animated: true, completion: nil) } } class OpenChatsTableViewController: UITableViewController, MyAlert, OneRosterDelegate, BuddyRequestProtocol { override func viewDidLoad() { runMyAlert() } } 

Cree una categoría en UIViewController, escriba un método allí y llame a qué aplicación mostrará un cuadro de alerta.

Ahora cree un nuevo BaseViewController que se henetworkingará de UIViewController. Importe su categoría en este BaseViewController;

Desde este punto, cada vez que cree un nuevo viewController, select su tipo de class base como BaseViewController no UIViewController.

Al hacerlo, puede llamar a esa alerta que muestra el método desde cualquier lugar.