Swift中可选类型CGFloat的值未解包错误

use*_*935 11 swift

码:

var loadView = UIView(frame: CGRectMake(0, 0, self.window?.frame.size.width, self.window?.frame.size.height))
Run Code Online (Sandbox Code Playgroud)

我尝试以progrmatically方式创建一个UIView.当尝试为视图设置窗口高度和宽度时,它会将错误称为"可选类型的值'CGFloat?' 没打开;你的意思是用'!' 要么 '?'?" 为什么这个错误显示?任何帮助将不胜感激.谢谢提前

Ant*_*nio 26

您正在使用可选链接,这意味着self.window?.frame.width如果window不是nil,则计算为有效整数,否则计算结果为nil- 相同height.

由于您无法进行CGRect包含nil(或更好地说,CGRectMake不接受任何参数的可选项),编译器会将其报告为错误.

解决方案是隐式解包self.window:

    var loadView = UIView(frame: CGRectMake(0, 0, self.window!.frame.size.width, self.window!.frame.size.height))
Run Code Online (Sandbox Code Playgroud)

但是,如果发生这种情况,self.window则会引发运行时错误nil.使用可选绑定来包围它总是更好的做法:

if let window = self.window {
    var loadView = UIView(frame: CGRectMake(0, 0, window.frame.size.width, window.frame.size.height))
    .... do something with loadVIew
}
Run Code Online (Sandbox Code Playgroud)

这样你就可以确定只有在self.window实际上不是nil 时才创建视图.