¿Cómo obtengo una referencia al delegado de la aplicación en Swift?

¿Cómo obtengo una referencia al delegado de la aplicación en Swift?

En última instancia, quiero usar la referencia para acceder al contexto del objeto gestionado.

La otra solución es correcta, ya que le proporcionará una referencia al delegado de la aplicación, pero esto no le permitirá acceder a ningún método o variable añadidos por su subclase de aplicación UIA, como su contexto de objeto gestionado. Para resolver esto, simplemente descárguelo a “AppDelegate” o cualquiera que sea su subclase UIApplication que se llame. Al igual que:

Swift 3.x (presentado con Xcode 8)

let appDelegate = UIApplication.shared.delegate as! AppDelegate let aVariable = appDelegate.someVariable 

Swift 1.2 – 2.x (presentado con Xcode 6.3)

 let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate let aVariable = appDelegate.someVariable 

Swift <1.2

 let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate let aVariable = appDelegate.someVariable 

En Swift, de fácil acceso en su VC

 extension UIViewController { var appDelegate:AppDelegate { return UIApplication.sharedApplication().delegate as! AppDelegate } } 

Es más o menos lo mismo que en Objective-C

 let del = UIApplication.sharedApplication().delegate 

Constructores de conveniencia

Agregar en AppDelegate Class al final del código

Swift 3 y 4

 func appDelegate () -> AppDelegate { return UIApplication.shared.delegate as! AppDelegate } 

Para usar la referencia AppDelegate en tu clase?


Llamar al método AppDelegate

appDelegate (). setRoot ()

Esto podría usarse para OS X

 let appDelegate = NSApplication.sharedApplication().delegate as AppDelegate var managedObjectContext = appDelegate.managedObjectContext? 

Aquí está la versión de Swift 2.0:

 let delegate = UIApplication.sharedApplication().delegate as? AppDelegate 

Y para acceder al contexto del objeto gestionado:

  if let delegate = UIApplication.sharedApplication().delegate as? AppDelegate { let moc = delegate.managedObjectContext // your code here } 

o, usando guardia:

  guard let delegate = UIApplication.sharedApplication().delegate as? AppDelegate else { return } let moc = delegate.managedObjectContext // your code here 

SWIFT <3

Cree un método en AppDelegate Class para ex

 func sharedInstance() -> AppDelegate{ return UIApplication.sharedApplication().delegate as! AppDelegate } 

y llamarlo a otro lugar para ex

 let appDelegate : AppDelegate = AppDelegate().sharedInstance() 

SWIFT> = 3.0

 func sharedInstance() -> AppDelegate{ return UIApplication.shared.delegate as! AppDelegate } 

Aparte de lo que se dice aquí, en mi caso me perdí de importación UIKit:

 import UIKit 

1) Asegúrate de import UIKit

2) let appDelegate = UIApplication.sharedApplication().delegate! as! AppDelegate let appDelegate = UIApplication.sharedApplication().delegate! as! AppDelegate

Intenta simplemente esto:

Swift 4

 // Call the method (UIApplication.shared.delegate as? AppDelegate)?.whateverWillOccur() 

dónde en su AppDelegate:

 // MARK: - Whatever func whateverWillOccur() { // Your code here. } 

En mi caso, me faltaba import UIKit encima de mi subclase NSManagedObject . Después de importarlo, podría eliminar ese error ya que UIApplication es parte de UIKit

Espero que ayude a otros !!!

Yo uso esto en Swift 2.3.

1.en la clase AppDelegate

 static let sharedInstance: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 

2. Llame a AppDelegate con

 let appDelegate = AppDelegate.sharedInstance 

Aquí hay una extensión para UIApplicationDelegate que evita el código rígido del nombre de la clase AppDelegate :

 extension UIApplicationDelegate { static var shared: Self { return UIApplication.shared.delegate! as! Self } } // use like this: let appDelegate = MyAppDelegate.shared // will be of type MyAppDelegate 

Es muy simple

Instancia delegada de la aplicación

 let app = UIApplication.shared.delegate as! AppDelegate 

puede llamar a un método con una sola línea de syntax

 app.callingMethod() 

puedes acceder a una variable con este código

 app.yourVariable = "Assigning a value" 

En Swift 3.0 puede obtener la referencia de appdelegate la appdelegate por

 let appDelegate = UIApplication.shared.delegate as! AppDelegate 

En el XCode 6.2, esto también funciona

 let appDelegate = UIApplication.sharedApplication().delegate! as AppDelegate let aVariable = appDelegate.someVariable