一尘不染

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

swift

码:

var loadView = UIView(frame: CGRectMake(0, 0, self.window?.frame.size.width, self.window?.frame.size.height))

我尝试以编程方式创建UIView。尝试设置视图的窗口高度和宽度时,它给出错误为“可选类型’CGFloat的值?” 没有包装;您的意思是使用’!’ 要么
‘?’?” 为什么显示此错误?需要任何帮助。


阅读 206

收藏
2020-07-07

共1个答案

一尘不染

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

由于您无法使一个CGRect包含nil(或更确切地说,CGRectMake不接受其任何参数的可选参数),因此编译器将其报告为错误。

解决方案是隐式展开self.window

    var loadView = UIView(frame: CGRectMake(0, 0, self.window!.frame.size.width, self.window!.frame.size.height))

但是,这引起了在该事件运行时错误self.windownil。用可选的绑定将其包围总是更好的做法:

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

这样就可以确保仅在self.window实际上不为零时创建视图。

2020-07-07