当我想检查可选布尔值是否为真时,这样做不起作用:
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(使用前将#替换为@)