当前位置: 首页 > 面试题库 >

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

尉迟俊能
2023-03-14
问题内容

码:

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

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


问题答案:

您正在使用可选链接,这意味着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实际上不为零时创建视图。



 类似资料:
  • 问题内容: 可选类型“ …”的值未包装;你是说用’!’ 要么 ‘?’? 有人可以向我解释此错误消息的确切含义吗?我什么时候应该使用“?” 什么时候 ‘!’? 问题答案: 如果对象不为null,则调用成员函数,否则不执行任何操作。 另一方面断言不为null,然后调用。如果对象 为 null,则将引发异常。 因此,在确定性上是有区别的:您可以询问或直接声明可为空的对象的可为空的属性。

  • Swift 的可选(Optional)类型,用于处理值缺失的情况。可选表示"那儿有一个值,并且它等于 x "或者"那儿没有值"。 Swfit语言定义后缀?作为命名类型Optional的简写,换句话说,以下两种声明是相等的: var optionalInteger: Int? var optionalInteger: Optional<Int> 在这两种情况下,变量 optionalIntege

  • 问题内容: 如何在显示时删除可选值上的文本而不必强制输入。 更新资料 当会话具有值时,其具有值: 问题答案: 您可以使用(null合并运算符)解开它,并提供默认值(如果为nil)

  • 本文向大家介绍swift 可选型的使用详解,包括了swift 可选型的使用详解的使用技巧和注意事项,需要的朋友参考一下  一、基本用法 可选性是Swift提供的一个特殊类型,它为我们编写程序提供便利的条件 swift是强类型语言,当我们需要使用一个变量,既可以为String,也可以为nil时,这时候就需要我们使用可选型。 二、可选型解包使用 三、多层解包(**swift3.0有变化) 四、Opti

  • 问题内容: 如何在Swift中汇总CGFloat?我已经尝试过了,但是只能在iPad Air和iPhone 5S上使用。 在另一台模拟设备上运行时,出现错误提示 问题答案: 更新 :Apple现在已经定义了一些CGFloat特定版本的常用功能,例如: …专门处理32/64位的差异。如果仅使用CGFloat参数,则它现在应在所有体系结构上都适用。 我的原始答案: 我认为这太可怕了,但是谁能想到更好的

  • 本文向大家介绍SpringMVC Controller 返回值的可选类型详解,包括了SpringMVC Controller 返回值的可选类型详解的使用技巧和注意事项,需要的朋友参考一下 spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void。 ModelAndView 通过ModelAndView构造方