检查可选 Bool 的值

2024-04-08

当我想检查可选布尔值是否为真时,这样做不起作用:

var boolean : Bool? = false
if boolean{
}

它会导致此错误:

可选类型“@IvalueBool?”不能用作布尔值;测试 '!= nil' 反而

我不想检查是否为零;我想检查返回的值是否为true。

我总是必须做吗if boolean == true如果我正在使用可选布尔值?

由于Options不符合BooleanType编译器不应该知道我想检查 Bool 的值吗?


使用可选布尔值,需要明确检查:

if boolean == true {
    ...
}

否则你可以打开可选的:

if boolean! {
    ...
}

但如果 boolean 是,则会生成运行时异常nil- 为了防止这种情况:

if boolean != nil && boolean! {
    ...
}

在 beta 5 之前这是可能的,但它已根据发行说明中的​​报告进行了更改:

当可选值有值时,不再隐式评估为 true;当没有值时,可选值不再隐式评估为 false,以避免在使用可选 Bool 值时出现混淆。相反,使用 == 或 != 运算符对 nil 进行显式检查,以查明可选值是否包含值。

附录:根据@MartinR的建议,第三个选项的更紧凑的变体是使用合并运算符:

if boolean ?? false {
    // this code runs only if boolean == true
}

这意味着:如果 boolean 不为 nil,则表达式计算为布尔值(即使用展开的布尔值),否则表达式计算为false

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查可选 Bool 的值 的相关文章

随机推荐

  • 本地#includes

    有没有某种方法可以在本地 include 标准内容 一次针对一个函数 一个类等 而不是全局的 举一个非常简单的例子 人们可能想使用 std string 但它只在一个类中需要 并且您不希望它的开销无处不在 而不是制作 include本地 您
  • componentWillReceiveProps 未触发

    在我的其他课程中 componentWillReceiveProps 工作得很好 但由于某种原因 它在这里没有触发 ItemView jsx class ItemView extends React Component constructo
  • MySQL 中多列的不同

    我希望找出 MySQL 数据库中不同行的计数 id val1 val2 val3 1 1 1 1 2 1 1 1 3 2 2 2 4 2 2 2 在上表中 查询将返回 val1 val2 val3 count 1 1 1 2 2 2 2 2
  • 如何在 case_when 语句中检测多个正则表达式

    我最近从 ifelse 转换为case when from dplyr Aim 我希望能够使用以下命令从数据帧中的语句中检测多个正则表达式case when如下 Input statement lt data frame statement
  • C++ 运算符查找规则 / Koenig 查找

    在编写测试套件时 我需要提供一个实现operator lt lt std ostream 供 Boost 单元测试使用 这有效 namespace theseus namespace core std ostream operator lt
  • 如何使用dotnetbrowser获取ajax请求响应正文?

    我已经浏览了 dotnetbrowser 网站上的文档 同时我看到了一个示例 展示了如何交叉 Ajax 调用或过滤 Ajax 调用 我想知道执行后是否可以获取 Ajax 请求正文响应 如果可能的话我该怎么做 是的 可以在 DotNetBro
  • 在 AWS lambda Node JS 的 http 响应标头中设置 Cookie

    我启用了 Lambda 代理集成 并将响应标头设置为 Lambda 输出和 API 网关的一部分 API 网关会将它们作为 HTTP 响应的一部分返回给客户端 示例代码 callback null statusCode 302 Locati
  • 如何形成独特的年、月、日的嵌套结构?

    我有一个日期数组 如下所示 2020 06 20T11 18 40 359Z 2020 06 15T11 17 45 511Z 2020 05 13T11 19 45 511Z 2019 04 20T11 49 27 828Z 我该怎么做才
  • Android Studio 3.3 xml 在 LinearLayout 上预览内部阴影

    我刚刚将 Android Studio 更新到版本 3 3 现在 在每个 XML 文件中 每个嵌套的 LinearLayout 的左侧和右侧都有一个内部阴影 如何将其去除 None
  • 如何使我的电子邮件代码适用于 PHP?

    嘿 此代码应该在未在电子邮件表单上输入输入时添加错误消息 并且应该在您最终输入代码时删除错误消息 我有两个使用以下代码 Generate a unique code function getUniqueCode length code md
  • AJAX 不更新部分视图

    我目前很难使用 Ajax 更新部分视图而无需刷新整个页面 我正在使用 MVC 和实体框架来构建视图 我将尝试尽可能多地包括在内以帮助解释自己 我有一个 div 将用于保存我所有评论的列表视图 div div 该 div 使用以下内容填充 S
  • Docker&Celery - 错误:Pidfile (celerybeat.pid) 已存在

    应用程序包括 姜戈 雷迪斯 芹菜 码头工人 Postgres 在将项目合并到 docker 之前 一切都运行顺利且正常 但是一旦将其移入容器 就开始出现问题 起初它开始得很好 但过了一会儿我确实收到了以下错误 celery beat 1 E
  • Spring Boot 的新遗迹

    最近 我们将一个 tomcat spring 应用程序转换为 spring boot 除了新遗物之外 一切都运行良好 有没有一种方法可以轻松地使用 Spring Boot 项目配置新的遗迹 我不想硬编码 new relic 代理 jar 路
  • 使用 VBA 确定进程 ID

    情况 我有一个宏 需要将击键按顺序发送到两个 Firefox 窗口 不幸的是 两个窗口具有相同的标题 为了处理这个问题 我激活了该窗口 发送了我的击键 然后使用 F6 加载第二个窗口的 URL 然后发送击键 然后使用 F6 将其返回到原始页
  • X86: `movsxd rdx,edx`指令是什么意思?

    我一直在玩intel mpx 发现它添加了某些我无法理解的指令 例如 英特尔格式 movsxd rdx edx I found this https stackoverflow com questions 33268906 how does
  • 为什么没有将 `std::initializer_list` 定义为文字类型?

    这是这个问题的后续 声明 constexprinitializer list 对象是否合法 https stackoverflow com questions 16063123 is it legal to declare a conste
  • Julia 泛型函数类型参数

    我定义了一个函数如下 function approx pi n tot Float64 0 0 for i in 1 n x rand y rand if x 2 y 2 lt 1 tot 1 end end tot n 4 end pri
  • 3D 哪个更快? Perlin 噪声还是 Simplex 噪声?

    好吧 网上有很多 Perlin 噪声和 Simplex 噪声之间的比较 但我真的找不到一个对三个维度进行简单处理时间比较的地方 这是我最感兴趣的 我读过那个流行的PDF http webstaff itn liu se stegu simp
  • DateTime 和 DateTime2 之间的区别[重复]

    这个问题在这里已经有答案了 可能的重复 SQL Server datetime2 与 datetime https stackoverflow com questions 1334143 sql server datetime2 vs da
  • 检查可选 Bool 的值

    当我想检查可选布尔值是否为真时 这样做不起作用 var boolean Bool false if boolean 它会导致此错误 可选类型 IvalueBool 不能用作布尔值 测试 nil 反而 我不想检查是否为零 我想检查返回的值是否