Как получить ссылку на делегат приложения в 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