Looking at a Swift example:
if let sourceViewController = sender.sourceViewController as? MealViewController, meal = sourceViewController.meal {
...
}
The doc states:
... the code assigns that view controller to the local constant sourceViewController, and checks to see if the meal property on sourceViewController is nil.
Question: Does Swift let you have multiple conditions in your if statement when separated by commas (as in this example with the comma after MealViewController
)?
Haven't seen this in the docs.
Yes when you write
if let a = optA, let b = optB, let c = optC {
}
Swift does execute the body of the IF
only if all the optional bindings are properly completed.
Another feature of this technique: the assignments are done in order.
So only if a value is properly assigned to a
, Swift tries to assign a value to b
. And so on.
This allows you to use the previous defined variable/constant like this
if let a = optA, let b = a.optB {
}
In this case (in second assignment) we are safely using a
because we know that if that code is executed, then a
has been populated with a valid value.
Yes. Swift: Documentation: Language Guide: The Basics: Optional Binding says:
You can include as many optional bindings and Boolean conditions in a single
if
statement as you need to, separated by commas. If any of the values in the optional bindings arenil
or any Boolean condition evaluates tofalse
, the wholeif
statement’s condition is considered to befalse
. The followingif
statements are equivalent:if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100 { print("\(firstNumber) < \(secondNumber) < 100") } // Prints "4 < 42 < 100" if let firstNumber = Int("4") { if let secondNumber = Int("42") { if firstNumber < secondNumber && secondNumber < 100 { print("\(firstNumber) < \(secondNumber) < 100") } } } // Prints "4 < 42 < 100"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With