在if语句中计算可选对象的Bool属性

时间:2014-11-13 13:39:46

标签: swift boolean evaluation optional

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
}

3 个答案:

答案 0 :(得分:15)

啊,发现它了:

if objectWithBool?.bool == true {
    // objectWithBool != nil && bool == true
} else {
    // objectWithBool == nil || bool == false
}

可选的链接表达式objectWithBool?.bool返回可选的Bool。由于它是可选的,因此if语句中的表达式将根据可选项是否包含值来评估为true / false

通过使用==运算符,if语句会检查可选项的值,在这种情况下可以是truefalsenil。< / 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
}