Охранная операция Swift 2

Я использую Swift 2 и Xcode 7.

Я хотел бы знать разницу между

if condition { ... } else { ... } 

а также

guard ... else ...

3 ответа

Решение

Действительно большая разница в том, что вы делаете необязательную привязку:

if let x = xOptional {
    if let y = yOptional {
        // ... and now x and y are in scope, _nested_
    }
}

Сравните это:

guard let x = xOptional else {return}
guard let y = yOptional else {return}
// ... and now x and y are in scope _at top level_

По этой причине у меня часто есть последовательность нескольких guard заявления, прежде чем я доберусь до сути рутины.

Как if заявление, guard выполняет заявления на основе Boolean значение выражения. В отличие от if заявление, guard заявления выполняются только в том случае, если условия не выполняются. Вы можете думать об охране больше как AssertНо вместо сбоя вы можете грациозно выйти.

Ссылка и пример кода здесь.

Чтобы добавить к ответу Мэтта, вы можете включить несколько условий в один защитный оператор:

guard let x = xOptional, y = yOptional else { return }
// ... and now x and y are in scope _at top level_

В дополнение к необязательному связыванию условие защиты может проверять логические результаты:

guard x > 0 else { return }

Короче говоря, преимущество защитного оператора заключается в том, чтобы сделать ранний выход очевидным в начале области действия, а не скрывать условие дальше в вложенном операторе else.

Другие вопросы по тегам