Stuart Stuart - 1 month ago 13
Swift Question

Evaluate Bool property of optional object in if statement

I am looking for a way to evaluate a Swift

Bool
concisely in a single
if
statement, when the
Bool
is the property of an optional object:

var objectWithBool: ClassWithBool?
// ...

if let obj = objectWithBool {
if obj.bool {
// bool == true
} else {
// bool == false
}
} else {
// objectWithBool == nil
}


Is there are way to combine these
if
statements? In Objective-C this could easily be done, as a
nil
object can be evaluated in the same expression:

if (objectWithBool.bool) {
// bool == true
} else {
// bool == false || objectWithBool == nil
}

Answer

Ah, found it:

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

The optional chaining expression objectWithBool?.bool returns an optional Bool. Since it is optional, that expression alone in the if statement would be evaluated to true/false based on whether the optional contains a value or not.

By using the == operator the if statement checks the optional's value, which in this case can be true, false, or nil.

Comments