码:
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 时才创建视图.