Охранная операция 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.