Как мне получить ссылку на делегат приложения в Swift?
В конечном счете, я хочу использовать ссылку для доступа к контексту управляемого объекта.
Как мне получить ссылку на делегат приложения в Swift?
В конечном счете, я хочу использовать ссылку для доступа к контексту управляемого объекта.
Другое решение верно в том смысле, что оно предоставит вам ссылку на делегат приложения, но это не позволит вам получить доступ к любым методам или переменным, добавленным вашим подклассом UIApplication, например, к контексту управляемого объекта. Чтобы решить эту проблему, просто отключите приложение "AppDelegate" или когда-нибудь ваш подкласс UIApplication будет вызван. Например:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let aVariable = appDelegate.someVariable
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let aVariable = appDelegate.someVariable
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let aVariable = appDelegate.someVariable
Swift 4.2
В Swift легко получить доступ к вашим ВК
extension UIViewController {
var appDelegate: AppDelegate {
return UIApplication.shared.delegate as! AppDelegate
}
}
Добавьте в класс AppDelegate в конце кода
func appDelegate() -> AppDelegate {
return UIApplication.shared.delegate as! AppDelegate
}
Чтобы использовать ссылку AppDelegate в своем классе?
Call AppDelegate Method
appDelegate().setRoot()
Это почти так же, как в Objective-C
let del = UIApplication.sharedApplication().delegate
Это можно использовать для 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
Appart из того, что сказано здесь, в моем случае я пропустил импорт UIKit:
import UIKit
Создайте метод в классе AppDelegate для ex
func sharedInstance() -> AppDelegate{
return UIApplication.sharedApplication().delegate as! AppDelegate
}
и назовем его где-нибудь еще для ex
let appDelegate : AppDelegate = AppDelegate().sharedInstance()
func sharedInstance() -> AppDelegate{
return UIApplication.shared.delegate as! AppDelegate
}
Попробуйте просто это:
Swift 4
// Call the method
(UIApplication.shared.delegate as? AppDelegate)?.whateverWillOccur()
где в вашем AppDelegate:
// MARK: - Whatever
func whateverWillOccur() {
// Your code here.
}
1) Убедитесь, что вы import UIKit
2) let appDelegate = UIApplication.sharedApplication().delegate! as! AppDelegate
Здесь расширение для 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
это очень просто
Экземпляр делегата приложения
let app = UIApplication.shared.delegate as! AppDelegate
Вы можете вызвать метод с синтаксисом в одну строку
app.callingMethod()
вы можете получить доступ к переменной с помощью этого кода
app.yourVariable = "Assigning a value"
В моем случае я отсутствовал import UIKit
поверх моего подкласса NSManagedObject
.
После его импорта я мог удалить эту ошибку, поскольку UIApplication
является частью UIKit
Надеюсь, что это поможет другим!!!
Я использую это в Swift 2.3.
1.в классе AppDelegate
static let sharedInstance: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
2.Call AppDelegate с
let appDelegate = AppDelegate.sharedInstance
extension AppDelegate {
// MARK: - App Delegate Ref
class func delegate() -> AppDelegate {
return UIApplication.shared.delegate as! AppDelegate
}
}
Начиная с 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
}
}
В 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