¿Cómo obtengo una referencia a AppDelegate en Swift?

Resuelto AperioOculus asked hace 10 años • 18 respuestas

¿Cómo obtengo una referencia a AppDelegate en Swift?

En última instancia, quiero utilizar la referencia para acceder al contexto del objeto administrado.

AperioOculus avatar Jun 05 '14 02:06 AperioOculus
Aceptado

La otra solución es correcta porque le proporcionará una referencia al delegado de la aplicación, pero esto no le permitirá acceder a ningún método o variable agregado por su subclase de UIApplication, como su contexto de objeto administrado. Para resolver esto, simplemente baje a "AppDelegate" o como se llame su subclase UIApplication. En Swift 3, 4 y 5 , esto se hace de la siguiente manera:

let appDelegate = UIApplication.shared.delegate as! AppDelegate
let aVariable = appDelegate.someVariable
Mick MacCallum avatar Jun 04 '2014 20:06 Mick MacCallum

Rápido 4.2

En Swift, fácil acceso en sus VC

extension UIViewController {
    var appDelegate: AppDelegate {
    return UIApplication.shared.delegate as! AppDelegate
   }
}
DogCoffee avatar Sep 13 '2015 01:09 DogCoffee

Constructores de conveniencia

Agregue la clase AppDelegate al final del código

Rápido 5.7

 func appDelegate() -> AppDelegate {
    guard let delegate = UIApplication.shared.delegate as? AppDelegate else {
        fatalError("could not get app delegate ")
    }
    return delegate
 }

¿Usar la referencia de AppDelegate en cualquier parte del código?


Por ejemplo: llamar al método AppDelegate denominado setRoot

appDelegate().setRoot()

Ejemplo de delegado de escena:

func sceneDelegate() -> SceneDelegate {
    guard let sceneDelegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate else {
      fatalError("could not get scene delegate ")
    }
   return sceneDelegate
}
AiOsN avatar Jul 05 '2015 10:07 AiOsN

Esto podría usarse para OS X

let appDelegate = NSApplication.sharedApplication().delegate as AppDelegate
var managedObjectContext = appDelegate.managedObjectContext?
jiminybob99 avatar Feb 22 '2015 17:02 jiminybob99

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

let del = UIApplication.sharedApplication().delegate
Connor Pearson avatar Jun 04 '2014 19:06 Connor Pearson