的UIWindow? 没有名为bounds的成员

我试图更新PKHUD( https://github.com/pkluz/PKHUD )与Xcode 6testing版5一起工作,几乎通过除了一个微小的细节:

internal class Window: UIWindow { required internal init(coder aDecoder: NSCoder!) { super.init(coder: aDecoder) } internal let frameView: FrameView internal init(frameView: FrameView = FrameView()) { self.frameView = frameView // this is the line that bombs super.init(frame: UIApplication.sharedApplication().delegate.window!.bounds) rootViewController = WindowRootViewController() windowLevel = UIWindowLevelNormal + 1.0 backgroundColor = UIColor.clearColor() addSubview(backgroundView) addSubview(frameView) } // more code here } 

Xcode给了我错误的UIWindow? does not have a member named 'bounds' UIWindow? does not have a member named 'bounds' 。 我很确定这是一个与types转换有关的小错误,但是我几个小时以来一直无法find答案。

此外,这个错误只发生在Xcode 6 beta 5,这意味着答案在于苹果公司最近改变的东西。

所有的帮助,非常感谢。

UIApplicationDelegate协议中的window属性的声明从

 optional var window: UIWindow! { get set } // beta 4 

 optional var window: UIWindow? { get set } // beta 5 

这意味着它是一个可选的属性,产生一个可选的UIWindow

 println(UIApplication.sharedApplication().delegate.window) // Optional(Optional(<UIWindow: 0x7f9a71717fd0; frame = (0 0; 320 568); ... >)) 

所以你必须拆开两遍:

 let bounds = UIApplication.sharedApplication().delegate.window!!.bounds 

或者,如果您想检查应用程序委托没有窗口属性的可能性,或者将其设置为nil

 if let bounds = UIApplication.sharedApplication().delegate.window??.bounds { } else { // report error } 

更新:使用Xcode 6.3, delegate属性现在也被定义为一个可选的,所以现在的代码

 let bounds = UIApplication.sharedApplication().delegate!.window!!.bounds 

要么

 if let bounds = UIApplication.sharedApplication().delegate?.window??.bounds { } else { // report error } 

另请参见为什么是双重可选的主窗口? 寻求更多解决scheme