【问题标题】:Value of optional type CGFloat not unwrapped error in SwiftSwift 中可选类型 CGFloat 的值未解包错误
【发布时间】:2014-09-04 10:02:13
【问题描述】:

代码:

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

我尝试以编程方式创建 UIView。当尝试为视图设置窗口高度和宽度时,它会给出错误“可选类型 'CGFloat?' 的值?”没有打开;你是不是要使用“!”或者 '?'?” 为什么显示此错误?任何帮助将不胜感激。在此先感谢

【问题讨论】:

    标签: swift


    【解决方案1】:

    您使用的是optional chaining,这意味着如果window 不是nil,则self.window?.frame.width 计算为有效整数,否则计算为nil - height 相同。

    由于您无法创建包含 nilCGRect(或者更好地说,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 实际上不是 nil 时才会创建视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-29
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多