Как получить ссылку на делегат приложения в Swift?

Как мне получить ссылку на делегат приложения в Swift?

В конечном счете, я хочу использовать ссылку для доступа к контексту управляемого объекта.

Ответ 1

Другое решение верно в том смысле, что оно предоставит вам ссылку на делегат приложения, но это не позволит вам получить доступ к любым методам или переменным, добавленным вашим подклассом UIApplication, например, к контексту управляемого объекта. Чтобы решить эту проблему, просто отключите приложение "AppDelegate" или когда-нибудь ваш подкласс UIApplication будет вызван. Например:

Swift 3.x(введен с Xcode 8)

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

Swift 1.2 - 2.x(введено с 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

Ответ 2

Swift 4.2

В Swift легко получить доступ к вашим ВК

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

Ответ 3

Удобные Конструкторы

Добавьте в класс AppDelegate в конце кода

Swift 5

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

Чтобы использовать ссылку AppDelegate в своем классе?


Call AppDelegate Method

appDelegate().setRoot()

Ответ 4

Это почти так же, как в Objective-C

let del = UIApplication.sharedApplication().delegate

Ответ 5

Это можно использовать для OS X

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

Ответ 6

Вот версия Swift 2.0:

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

И для доступа к контексту управляемого объекта:

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

        let moc = delegate.managedObjectContext

        // your code here

    }

или, используя охрану:

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

    let moc = delegate.managedObjectContext

    // your code here

Ответ 7

Appart из того, что сказано здесь, в моем случае я пропустил импорт UIKit:

import UIKit

Ответ 8

SWIFT < 3

Создайте метод в классе AppDelegate для ex

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

и назовем его где-нибудь еще для ex

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

SWIFT >= 3.0

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

Ответ 9

Попробуйте просто это:

Swift 4

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

где в вашем AppDelegate:

// MARK: - Whatever
func whateverWillOccur() {

    // Your code here.

}

Ответ 10

1) Убедитесь, что вы import UIKit

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

Ответ 11

Здесь расширение для UIApplicationDelegate, которое позволяет избежать жесткого кодирования имени класса 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

Ответ 12

это очень просто

Экземпляр делегата приложения

let app = UIApplication.shared.delegate as! AppDelegate

Вы можете вызвать метод с синтаксисом в одну строку

app.callingMethod()

вы можете получить доступ к переменной с помощью этого кода

app.yourVariable = "Assigning a value"

Ответ 13

В моем случае я отсутствовал import UIKit поверх моего подкласса NSManagedObject. После его импорта я мог удалить эту ошибку, поскольку UIApplication является частью UIKit

Надеюсь, что это поможет другим!!!

Ответ 14

Я использую это в Swift 2.3.

1.в классе AppDelegate

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

2.Call AppDelegate с

let appDelegate = AppDelegate.sharedInstance

Ответ 15

extension AppDelegate {

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

Ответ 16

Начиная с iOS 12.2 и Swift 5.0, AppDelegate не является признанным символом. UIApplicationDelegate есть. Поэтому любые ответы, относящиеся к AppDelegate, больше не являются правильными. Следующий ответ является правильным и позволяет избежать принудительного развертывания, которое некоторые разработчики считают запахом кода:

import UIKit

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

Ответ 17

В Swift 3.0 вы можете получить ссылку appdelegate на

let appDelegate = UIApplication.shared.delegate as! AppDelegate

Ответ 18

В XCode 6.2 это также работает

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

let aVariable = appDelegate.someVariable