如何获得快速应用程序中的keyWindow引用?

在UIViewController的viewDidLoad方法的Objective-C中,我这样做是为了在我的iOS应用程序中获取keyWindow引用:

UIWindow * keyWindow = [[UIApplication sharedApplication] keyWindow]; 

所以,我将这个视图控制器移植到Swift中,我做了一个viewDidLoad调用:

 let window = UIApplication.sharedApplication().keyWindow 

我想了解为什么窗口是零。 当我在该行后面放置一个断点时,然后检查控制台中的窗口,我得到这个:

 (lldb) po window nil 

我怎样才能让窗口成为​​我的应用程序的keyWindow的有效参考?

当我正在迅速寻找窗户的时候,我就想到了这个问题。 如果你想获得窗口而不是keyWindow,试试这个:

 if let app = UIApplication.sharedApplication().delegate as? AppDelegate, let window = app.window { MBProgressHUD.show(text, view:window) } 

更新了Swift 3:(谢谢@Trevor)

 if let app = UIApplication.shared.delegate as? AppDelegate, let window = app.window { MBProgressHUD.show(text, view:window) } 

在viewDidLoad时,还不能设置关键窗口。 你的代码在viewDidAppear中工作正常。 或者,您可以在viewDidLoad中获取windows数组,并从该数组中获取一个(如果有多个)窗口。

更新superarts.org的答案Swift 3:

 if let app = UIApplication.shared.delegate as? AppDelegate, let window = app.window { MBProgressHUD.show(text, view: window) } 

不要在didLoad函数中调用window调用ViewController的viewDidAppear函数中的keyWindow