Swift if statement - несколько условий, разделенных запятыми?
Глядя на пример Swift:
if let sourceViewController = sender.sourceViewController as? MealViewController, meal = sourceViewController.meal {
...
}
В документе говорится:
... код назначает этот контроллер представления локальному постоянному sourceViewController и проверяет, нет ли свойства питания на sourceViewController.
Вопрос. Сможет ли Swift иметь несколько условий в вашем выражении if, разделенных запятыми (как в этом примере с запятой после MealViewController
)?
Не видели этого в документах.
Ответы
Ответ 1
Да, когда вы пишете
if let a = optA, let b = optB, let c = optC {
}
Swift выполняет тело IF
только в том случае, если все назначения выполнены правильно.
Больше
Другая особенность этого метода: задания выполняются по порядку.
Таким образом, только если значение правильно присвоено a
, Swift пытается присвоить значение b
. И так далее.
Это позволяет использовать предыдущую определенную переменную/константу, подобную этой
if let a = optA, let b = a.optB {
}
В этом случае (во втором присваивание) мы благополучно используя, потому что мы знаем, что, если этот код выполняется, то была заселена с допустимым значением. a
a
Ответ 2
Да. Swift: Документация: Руководство по языкам: Основы: Опциональное связывание гласит:
Вы можете включить столько необязательных привязок и логических условий в один оператор if
сколько вам нужно, через запятую. Если какое-либо из значений в необязательных привязках nil
или какое-либо логическое условие оценивается как false
, условие целого оператора if
считается false
. Следующие операторы if
эквивалентны:
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"