当Bool
是可选对象的属性时,我正在寻找一种简单地在单if
语句中评估Swift Bool
的方法:
var objectWithBool: ClassWithBool?
// ...
if let obj = objectWithBool {
if obj.bool {
// bool == true
} else {
// bool == false
}
} else {
// objectWithBool == nil
}
是否有办法合并这些if
语句?在Objective-C中,这很容易实现,因为可以在同一个表达式中评估nil
对象:
if (objectWithBool.bool) {
// bool == true
} else {
// bool == false || objectWithBool == nil
}
答案 0 :(得分:15)
if objectWithBool?.bool == true {
// objectWithBool != nil && bool == true
} else {
// objectWithBool == nil || bool == false
}
可选的链接表达式objectWithBool?.bool
返回可选的Bool
。由于它是可选的,因此if
语句中的表达式将根据可选项是否包含值来评估为true
/ false
。
通过使用==
运算符,if
语句会检查可选项的值,在这种情况下可以是true
,false
或nil
。< / p>
答案 1 :(得分:4)
另一种可能的解决方案是:
if objectWithBool?.bool ?? false {
println("objectWithBool != nil && objectWithBool.bool == true")
} else {
println("objectWithBool == nil || objectWithBool.bool == false")
}
"nil coalescing operator" a ?? b
是
a != nil ? a! : b
答案 2 :(得分:0)
你也可以这样做:
if let obj = objectWithBool where obj {
// objectWithBool != nil && obj == true
} else {
// objectWithBool == nil || obj == false
}