如何在Swift中获得对应用程序委托的引用?

如何在Swift中获得对应用程序委托的引用?

最终,我想使用引用来访问托pipe对象上下文。

另一个解决scheme是正确的,因为它将引导您对应用程序的委托进行引用,但是这不会允许您访问由您的UIApplication的子类添加的任何方法或variables,例如托pipe对象上下文。 为了解决这个问题,只需简单地向下翻到“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 

斯威夫特<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 

这可以用于OS X

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

这是Swift 2.0版本:

 let delegate = UIApplication.sharedApplication().delegate as? AppDelegate 

并访问pipe理的对象上下文:

  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 

简单和方便的构造

在代码结尾添加一个AppDelegate类的构造函数

Swift 3.x

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

Swift 2.x

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

如何在课堂上使用参考?

 Method ------- appDelegate().methodFoo() Variable --------- appDelegate().foo 

公寓从这里告诉,在我的情况下,我错过了importUIKit:

 import UIKit 

SWIFT <3

在前面的AppDelegate类中创build一个方法

 func sharedInstance() -> AppDelegate{ return UIApplication.sharedApplication().delegate as! AppDelegate } 

并把它称为一些其他地方前

 let appDelegate : AppDelegate = AppDelegate().sharedInstance() 

SWIFT> = 3.0

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

1)确保您import UIKit

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

在我的情况下,我在我的NSManagedObject子类上缺lessimport UIKit 。 导入后,我可以删除该错误,因为UIApplicationUIKit的一部分

希望它可以帮助别人!

我在Swift 2.3中使用这个。

在AppDelegate类中

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

2.用App调用AppDelegate

 let appDelegate = AppDelegate.sharedInstance 

在Swift 3.0中你可以得到appdelegate引用

 let appDelegate = UIApplication.shared.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 

在XCode 6.2中,这也是可行的

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