Comment obtenir une référence au délégué de l'application dans Swift?
En fin de compte, je souhaite utiliser la référence pour accéder au contexte de l'objet géré.
L'autre solution est correcte en ce sens qu'elle vous donnera une référence au délégué de l'application, mais que cela ne vous permettra pas d'accéder aux méthodes ou aux variables ajoutées par votre sous-classe d'UIApplication, comme le contexte de votre objet géré. Pour résoudre ce problème, descendez simplement en "AppDelegate" ou quel que soit le nom de votre sous-classe UIApplication. Ainsi:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let aVariable = appDelegate.someVariable
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let aVariable = appDelegate.someVariable
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let aVariable = appDelegate.someVariable
Swift 4.2
Dans Swift, accès facile dans vos VC
extension UIViewController {
var appDelegate: AppDelegate {
return UIApplication.shared.delegate as! AppDelegate
}
}
Ajouter dans AppDelegate Class à la fin du code
func appDelegate () -> AppDelegate
{
return UIApplication.shared.delegate as! AppDelegate
}
Pour utiliser la référence AppDelegate dans votre classe?
Appelez la méthode AppDelegate
appDelegate (). setRoot ()
C'est à peu près la même chose qu'en Objective-C
let del = UIApplication.sharedApplication().delegate
Cela pourrait être utilisé pour OS X
let appDelegate = NSApplication.sharedApplication().delegate as AppDelegate
var managedObjectContext = appDelegate.managedObjectContext?
Voici la version de Swift 2.0:
let delegate = UIApplication.sharedApplication().delegate as? AppDelegate
Et pour accéder au contexte de l'objet géré:
if let delegate = UIApplication.sharedApplication().delegate as? AppDelegate {
let moc = delegate.managedObjectContext
// your code here
}
ou, en utilisant la garde:
guard let delegate = UIApplication.sharedApplication().delegate as? AppDelegate else {
return
}
let moc = delegate.managedObjectContext
// your code here
Outre ce qui est dit ici, dans mon cas, j'ai raté l'importation d'UIKit:
import UIKit
Créer une méthode dans AppDelegate Class pour ex
func sharedInstance() -> AppDelegate{
return UIApplication.sharedApplication().delegate as! AppDelegate
}
et l'appeler quelque part ailleurs pour ex
let appDelegate : AppDelegate = AppDelegate().sharedInstance()
func sharedInstance() -> AppDelegate{
return UIApplication.shared.delegate as! AppDelegate
}
1) Assurez-vous de import UIKit
2) let appDelegate = UIApplication.sharedApplication().delegate! as! AppDelegate
Essayez simplement ceci:
Swift 4
// Call the method
(UIApplication.shared.delegate as? AppDelegate)?.whateverWillOccur()
où dans votre AppDelegate:
// MARK: - Whatever
func whateverWillOccur() {
// Your code here.
}
Voici une extension pour UIApplicationDelegate
qui évite de coder en dur le nom de la classe 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
c'est très simple
Instance de délégué d'application
let app = UIApplication.shared.delegate as! AppDelegate
vous pouvez appeler une méthode avec une syntaxe à une ligne
app.callingMethod()
vous pouvez accéder à une variable avec ce code
app.yourVariable = "Assigning a value"
Dans mon cas, il me manquait import UIKit
au-dessus de ma sous-classe NSManagedObject
. Après l'importation, je pouvais supprimer cette erreur car UIApplication
est la partie de UIKit
J'espère que ça aide les autres !!!
extension AppDelegate {
// MARK: - App Delegate Ref
class func delegate() -> AppDelegate {
return UIApplication.shared.delegate as! AppDelegate
}
}
Je l'utilise dans Swift 2.3.
1.dans la classe AppDelegate
static let sharedInstance: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
2.Appel AppDéléguer avec
let appDelegate = AppDelegate.sharedInstance
Dans Swift 3.0, vous pouvez obtenir la référence appdelegate
en
let appDelegate = UIApplication.shared.delegate as! AppDelegate
Dans le XCode 6.2, cela fonctionne aussi
let appDelegate = UIApplication.sharedApplication().delegate! as AppDelegate
let aVariable = appDelegate.someVariable
À partir de iOS 12.2 et de Swift 5.0, AppDelegate
n'est pas un symbole reconnu. UIApplicationDelegate
est. Toutes les réponses faisant référence à AppDelegate
ne sont donc plus correctes. La réponse suivante est correcte et évite le décompression forcée, ce que certains développeurs considèrent comme une odeur de code:
import UIKit
extension UIViewController {
var appDelegate: UIApplicationDelegate {
guard let appDelegate = UIApplication.shared.delegate else {
fatalError("Could not determine appDelegate.")
}
return appDelegate
}
}