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

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

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

Другое решение верно в том смысле, что оно предоставит вам ссылку на делегата приложения, но это не позволит вам получить доступ к любым методам или переменным, добавленным вашим подclassом UIApplication, например, к контексту управляемого объекта. Чтобы решить эту проблему, просто отключите приложение «AppDelegate» или когда-нибудь ваш подclass 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 

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

 extension UIViewController { var appDelegate:AppDelegate { return UIApplication.sharedApplication().delegate as! AppDelegate } } 

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

 let del = UIApplication.sharedApplication().delegate 

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

Добавить в class AppDelegate в конце кода

Swift 3 и 4

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

Использовать ссылку AppDelegate в своем classе?


Вызов метода AppDelegate

AppDelegate (). setRoot ()

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

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

Вот версия 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 

SWIFT <3

Создайте метод в classе 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 } 

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

 import UIKit 

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

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

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

Swift 4

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

где в AppDelegate:

 // MARK: - Whatever func whateverWillOccur() { // Your code here. } 

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

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

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

1.в classе AppDelegate

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

2.Call AppDelegate с

 let appDelegate = AppDelegate.sharedInstance 

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

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

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

 let app = UIApplication.shared.delegate as! AppDelegate 

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

 app.callingMethod() 

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

 app.yourVariable = "Assigning a value" 

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

 let appDelegate = UIApplication.shared.delegate as! AppDelegate 

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

 let appDelegate = UIApplication.sharedApplication().delegate! as AppDelegate let aVariable = appDelegate.someVariable 
  • В чем разница между `let` и` var` в swift?
  • Есть ли способ для Interface Builder визуализировать представления IBDesignable, которые не переопределяют drawRect:
  • Как я могу атомизировать приращение переменной в Swift?
  • Доступ к коду в Swift 3 Error
  • Словарь неправильного порядка - JSON
  • В чем разница между использованием ARAnchor для вставки узла и непосредственной вставкой узла?
  • структура против classа в быстром языке
  • Почему я не могу создать пустой массив вложенного classа?
  • Запрос AlamoFire GET api не работает должным образом
  • Swift: #warning эквивалент
  • Как отправить запрос POST и GET?
  • Давайте будем гением компьютера.