web-dev-qa-db-fra.com

Comment obtenir une référence au délégué de l'application dans Swift?

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é.

327
AperioOculus

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:

Swift 3.x (introduit avec Xcode 8)

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

Swift 1.2 - 2.x (introduit avec 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
655
Mick MacCallum

Swift 4.2

Dans Swift, accès facile dans vos VC

extension UIViewController {
    var appDelegate: AppDelegate {
    return UIApplication.shared.delegate as! AppDelegate
   }
}
31
DogCoffee

Constructeurs de commodité

Ajouter dans AppDelegate Class à la fin du code

Swift 3 & 4

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 ()

17
AiOsN

C'est à peu près la même chose qu'en Objective-C

let del = UIApplication.sharedApplication().delegate
15
Connor

Cela pourrait être utilisé pour OS X

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

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
11
Paul Ardeleanu

Outre ce qui est dit ici, dans mon cas, j'ai raté l'importation d'UIKit:

import UIKit

Swift <3

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()

Swift> = 3.0

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

1) Assurez-vous de import UIKit

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

4
Sachin Nikumbh

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.

}
4
user6226218

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
3
nyg

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"
1
Harendra Tiwari

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 !!!

1
NSPratik
extension AppDelegate {

    // MARK: - App Delegate Ref
    class func delegate() -> AppDelegate {
        return UIApplication.shared.delegate as! AppDelegate
    }
}
1
CrazyPro007

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
1
Ted Liu

Dans Swift 3.0, vous pouvez obtenir la référence appdelegate en

let appDelegate = UIApplication.shared.delegate as! AppDelegate
0
Ramakrishna

Dans le XCode 6.2, cela fonctionne aussi

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

let aVariable = appDelegate.someVariable
0
v01d

À 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
  }
}
0
Josh Adams