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"