的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