如何在Swift中获得对app delegate的引用?
最终,我想使用该引用来访问托管对象上下文。
答案 0 :(得分:673)
另一个解决方案是正确的,因为它将为您提供对应用程序委托的引用,但这不允许您访问由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
答案 1 :(得分:36)
Swift 4.2
在Swift中,很容易在VC中访问
extension UIViewController {
var appDelegate: AppDelegate {
return UIApplication.shared.delegate as! AppDelegate
}
}
答案 2 :(得分:17)
在代码末尾添加AppDelegate类
func appDelegate () -> AppDelegate
{
return UIApplication.shared.delegate as! AppDelegate
}
要在班级中使用AppDelegate引用吗?
调用AppDelegate方法
的appDelegate()。setRoot()
答案 3 :(得分:16)
与Objective-C
几乎相同let del = UIApplication.sharedApplication().delegate
答案 4 :(得分:15)
这可以用于OS X
let appDelegate = NSApplication.sharedApplication().delegate as AppDelegate
var managedObjectContext = appDelegate.managedObjectContext?
答案 5 :(得分:11)
这是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
答案 6 :(得分:10)
来自这里的公寓,在我的情况下,我错过了进口UIKit:
{{1}}
答案 7 :(得分:9)
在AppDelegate Class中为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
}
答案 8 :(得分:4)
1)确保import UIKit
2)let appDelegate = UIApplication.sharedApplication().delegate! as! AppDelegate
答案 9 :(得分:4)
以下是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
类名称进行硬编码:
{{1}}
答案 10 :(得分:4)
试试这个:
Swift 4
// Call the method
(UIApplication.shared.delegate as? AppDelegate)?.whateverWillOccur()
AppDelegate中的位置:
// MARK: - Whatever
func whateverWillOccur() {
// Your code here.
}
答案 11 :(得分:2)
非常简单
App委托实例
let app = UIApplication.shared.delegate as! AppDelegate
您可以使用一行语法
调用方法app.callingMethod()
您可以使用此代码访问变量
app.yourVariable = "Assigning a value"
答案 12 :(得分:1)
就我而言,我在import UIKit
子类的顶部缺少NSManagedObject
。
导入后,我可以删除该错误,因为UIApplication
是<{1}}
希望它可以帮助别人!!!
答案 13 :(得分:1)
我在Swift 2.3中使用它。
1.in AppDelegate class
static let sharedInstance: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
2.Call AppDelegate with
let appDelegate = AppDelegate.sharedInstance
答案 14 :(得分:1)
extension AppDelegate {
// MARK: - App Delegate Ref
class func delegate() -> AppDelegate {
return UIApplication.shared.delegate as! AppDelegate
}
}
答案 15 :(得分:0)
在Swift 3.0中,您可以通过
获取appdelegate
引用
let appDelegate = UIApplication.shared.delegate as! AppDelegate
答案 16 :(得分:0)
从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 :(得分:-1)
在XCode 6.2中,这也有效
let appDelegate = UIApplication.sharedApplication().delegate! as AppDelegate
let aVariable = appDelegate.someVariable