webentwicklung-frage-antwort-db.com.de

Wie bekomme ich einen Verweis auf den App-Delegierten in Swift?

Wie bekomme ich einen Verweis auf den App-Delegierten in Swift?

Letztendlich möchte ich die Referenz verwenden, um auf den Kontext des verwalteten Objekts zuzugreifen.

327
AperioOculus

Die andere Lösung ist insofern korrekt, als Sie einen Verweis auf den Delegaten der Anwendung erhalten. Dies ermöglicht jedoch nicht den Zugriff auf Methoden oder Variablen, die von Ihrer Unterklasse von UIApplication hinzugefügt wurden, wie z. Um dies zu beheben, müssen Sie einfach auf "AppDelegate" oder auf das, was auch immer Ihre UIApplication-Unterklasse heißt, einen Downcast ausführen. So wie:

Swift 3.x (eingeführt mit Xcode 8)

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

Swift 1.2 - 2.x (eingeführt mit Xcode 6.3)

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

Schnell <1,2

let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let aVariable = appDelegate.someVariable
655
Mick MacCallum

Swift 4.2

In Swift, leicht zugänglich in Ihren VCs

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

Convenience-Konstrukteure

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

Swift 3 & 4

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

AppDelegate-Referenz in Ihrer Klasse verwenden?


AppDelegate-Methode aufrufen

appDelegate (). setRoot ()

17
AiOsN

Es ist so ziemlich das gleiche wie in Objective-C

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

Dies kann für OS X verwendet werden

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

Hier ist die Swift 2.0 Version:

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

Und um auf den verwalteten Objektkontext zuzugreifen:

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

        let moc = delegate.managedObjectContext

        // your code here

    }

oder mit guard:

    guard let delegate = UIApplication.sharedApplication().delegate as? AppDelegate  else {
        return
    }

    let moc = delegate.managedObjectContext

    // your code here
11
Paul Ardeleanu

Abgesehen von dem, was hier erzählt wird, habe ich den Import UIKit verpasst:

import UIKit

Schnell <3

Erstellen Sie eine Methode in AppDelegate-Klasse für z

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

und nenne es irgendwo anders für Ex

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

Swift> = 3,0

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

1) Stellen Sie sicher, dass Sie import UIKit

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

5
Sachin Nikumbh

Versuchen Sie einfach folgendes:

Swift 4

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

wo in Ihrer AppDelegate:

// MARK: - Whatever
func whateverWillOccur() {

    // Your code here.

}
4
user6226218

Hier ist eine Erweiterung für UIApplicationDelegate, die den harten Code des AppDelegate-Klassennamens vermeidet:

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

es ist sehr einfach

App-Delegat-Instanz

let app = UIApplication.shared.delegate as! AppDelegate

sie können eine Methode mit einer einzeiligen Syntax aufrufen

app.callingMethod()

sie können mit diesem Code auf eine Variable zugreifen

app.yourVariable = "Assigning a value"
1
Harendra Tiwari

In meinem Fall fehlte import UIKit auf meiner NSManagedObject-Unterklasse . Nach dem Import konnte ich diesen Fehler entfernen, da UIApplication der Teil von UIKit

Hoffe es hilft anderen !!!

1
NSPratik
extension AppDelegate {

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

Ich verwende das in Swift 2.3.

1. in der AppDelegate-Klasse

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

2. AppDelegate mit anrufen

let appDelegate = AppDelegate.sharedInstance
1
Ted Liu

In Swift 3.0 können Sie die appdelegate-Referenz durch

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

Im XCode 6.2 funktioniert dies ebenfalls

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

let aVariable = appDelegate.someVariable
0
v01d

Ab iOS 12.2 und Swift 5.0 ist AppDelegate kein anerkanntes Symbol. UIApplicationDelegate ist. Antworten, die sich auf AppDelegate beziehen, sind daher nicht mehr korrekt. Die folgende Antwort ist richtig und vermeidet Force-Unwrapping, das einige Entwickler als Codegeruch betrachten:

import UIKit

extension UIViewController {
  var appDelegate: UIApplicationDelegate {
    guard let appDelegate = UIApplication.shared.delegate else {
      fatalError("Could not determine appDelegate.")
    }
    return appDelegate
  }
}
0
Josh Adams