如何在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
。 导入后,我可以删除该错误,因为UIApplication
是UIKit
的一部分
希望它可以帮助别人!
我在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