我如何在Swift中获得对AppDelegate的引用?
最后,我想使用引用来访问托管对象上下文。
这和Objective-C中的基本相同
let del = UIApplication.sharedApplication().delegate
另一个解决方案是正确的,因为它会让你引用应用程序的委托,但这将不允许你访问任何方法或变量添加你的UIApplication的子类,如你的管理对象上下文。要解决这个问题,只需向下转换为“AppDelegate”或任何你的UIApplication子类碰巧被调用的东西。在Swift 3,4 &5中,这样做:
let appDelegate = UIApplication.shared.delegate as! AppDelegate let aVariable = appDelegate.someVariable
这可以用于OS X
let appDelegate = NSApplication.sharedApplication().delegate as AppDelegate var managedObjectContext = appDelegate.managedObjectContext?
在Xcode 6.2中,这也是可行的
let appDelegate = UIApplication.sharedApplication().delegate! as AppDelegate let aVariable = appDelegate.someVariable
在代码末尾添加AppDelegate类
func appDelegate() -> AppDelegate { return UIApplication.shared.delegate as! AppDelegate }
在代码中的任何地方使用AppDelegate引用?
例如:调用名为setRoot的AppDelegate方法 .setRoot appDelegate () ()
例如:调用名为setRoot的AppDelegate方法
.setRoot appDelegate () ()
在AppDelegate类中为ex创建一个方法
func sharedInstance() -> AppDelegate{ return UIApplication.sharedApplication().delegate as! AppDelegate }
叫它"前任"吧
let appDelegate : AppDelegate = AppDelegate().sharedInstance()
func sharedInstance() -> AppDelegate{ return UIApplication.shared.delegate as! AppDelegate }
斯威夫特4.2
在Swift中,很容易在你的VC中访问
extension UIViewController { var appDelegate: AppDelegate { return UIApplication.shared.delegate as! AppDelegate } }
以下是Swift 5的版本:
let delegate = UIApplication.shared.delegate as? AppDelegate
并访问管理对象上下文:
if let delegate = UIApplication.shared.delegate as? AppDelegate { let moc = delegate.managedObjectContext // your code here }
或者,用guard:
guard let delegate = UIApplication.shared.delegate as? AppDelegate else { return } let moc = delegate.managedObjectContext // your code here
NSManagedObject
import UIKit
UIApplication
UIKit
希望它能帮助到其他人!!
除了这里所说的,在我的情况下,我错过了导入UIKit:
确保你import UIKit
let appDelegate = UIApplication.sharedApplication().delegate! as! AppDelegate
我在Swift 2.3中使用这个功能。
1.在AppDelegate类中
static let sharedInstance: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
2.调用AppDelegate
let appDelegate = AppDelegate.sharedInstance
在Swift 3.0中,你可以通过
let appDelegate = UIApplication.shared.delegate as! AppDelegate
下面是UIApplicationDelegate的扩展,它避免了硬编码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
试试简单的方法:
斯威夫特4
// Call the method (UIApplication.shared.delegate as? AppDelegate)?.whateverWillOccur()
在你的AppDelegate中:
// MARK: - Whatever func whateverWillOccur() { // Your code here. }
非常简单
应用程序委托实例
let app = UIApplication.shared.delegate as! AppDelegate
可以使用一行语法调用方法
app.callingMethod()
您可以使用这段代码访问一个变量
app.yourVariable = "Assigning a value"
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 } }