482 Stimmen

Wie erhalte ich eine Referenz auf den AppDelegate in Swift?

Wie bekomme ich eine Referenz zum AppDelegate in Swift?

Letztendlich möchte ich die Referenz verwenden, um auf den verwalteten Objektkontext zuzugreifen.

842voto

Mick MacCallum Punkte 126843

Die andere Lösung ist richtig, da sie Ihnen eine Referenz auf den Delegierten der Anwendung gibt, aber dies wird es Ihnen nicht ermöglichen, auf Methoden oder Variablen zuzugreifen, die von Ihrer Unterklasse von UIApplication hinzugefügt wurden, z. B. Ihren verwalteten Objektkontext. Um dies zu lösen, müssen Sie einfach zu "AppDelegate" oder was auch immer Ihre UIApplication-Unterklasse heißt, umwandeln. In Swift 3, 4 & 5 wird dies wie folgt durchgeführt:

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

54voto

DogCoffee Punkte 19387

Swift 4.2

In Swift, einfach in Ihren View Controllern zugänglich

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

40voto

AiOsN Punkte 2175

Komfortable Konstruktoren

Fügen Sie am Ende des Codes in der AppDelegate-Klasse hinzu

Swift 5.7

 func appDelegate() -> AppDelegate {
    guard let delegate = UIApplication.shared.delegate as? AppDelegate else {
        fatalError("Konnte App-Delegierten nicht erhalten")
    }
    return delegate
 }

Um den AppDelegate-Verweis überall im Code zu verwenden?


Zum Beispiel: Rufen Sie die AppDelegate-Methode mit dem Namen setRoot auf

appDelegate().setRoot()

Szene-Delegierten-Beispiel:

func sceneDelegate() -> SceneDelegate {
    guard let sceneDelegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate else {
      fatalError("Szene-Delegierten konnte nicht erhalten werden")
    }
   return sceneDelegate
}

24voto

jiminybob99 Punkte 817

Dies könnte für OS X verwendet werden

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

21voto

Connor Punkte 62453

Es ist ziemlich genau das Gleiche wie in Objective-C

let del = UIApplication.sharedApplication().delegate

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X