Come posso ottenere un riferimento al delegato dell’app in Swift?

Come posso ottenere un riferimento al delegato dell’app in Swift?

In definitiva, voglio usare il riferimento per accedere al contesto dell’object gestito.

L’altra soluzione è corretta in quanto ti darà un riferimento al delegato dell’applicazione, ma questo non ti permetterà di accedere a nessun metodo o variabile aggiunto dalla sottoclass di UIApplication, come il tuo contesto dell’object gestito. Per risolvere questo problema, semplicemente downcast a “AppDelegate” o qualsiasi altra sottoclass di UIApplication. Così:

Swift 3.x (Introdotto con Xcode 8)

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

Swift 1.2 – 2.x (Introdotto 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 

In Swift, facile accesso ai tuoi VC

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

È praticamente lo stesso di Objective-C

 let del = UIApplication.sharedApplication().delegate 

Comodi costruttori

Aggiungi in AppDelegate Class alla fine del codice

Swift 3 e 4

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

Per utilizzare il riferimento AppDelegate nella class?


Chiama il metodo AppDelegate

AppDelegate (). setRoot ()

Questo potrebbe essere usato per OS X

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

Ecco la versione di Swift 2.0:

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

E per accedere al contesto dell’object gestito:

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

oppure, usando la guardia:

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

SWIFT <3

Creare un metodo in AppDelegate Class per es

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

e chiamalo in qualche altro posto per l’ex

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

SWIFT> = 3.0

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

Appart da ciò che viene detto qui, nel mio caso ho perso un’importazione UIKit:

 import UIKit 

1) Assicurati di import UIKit

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

Prova semplicemente questo:

Swift 4

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

dove nel tuo AppDelegate:

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

Nel mio caso, mi mancava import UIKit sulla mia sottoclass NSManagedObject . Dopo averlo importato, ho potuto rimuovere UIApplication poiché UIApplication è la parte di UIKit

Spero che aiuti gli altri !!!

Lo uso in Swift 2.3.

1. nella class AppDelegate

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

2. Call AppDelegate con

 let appDelegate = AppDelegate.sharedInstance 

Ecco un’estensione per UIApplicationDelegate che evita l’ AppDelegate nome della class 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 

è molto semplice

Istanza delegata app

 let app = UIApplication.shared.delegate as! AppDelegate 

puoi chiamare un metodo con una syntax di riga

 app.callingMethod() 

puoi accedere a una variabile con questo codice

 app.yourVariable = "Assigning a value" 

In Swift 3.0 puoi ottenere il riferimento appdelegate di

 let appDelegate = UIApplication.shared.delegate as! AppDelegate 

In XCode 6.2, funziona anche questo

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