Есть ли способ включить несколько условий в инструкцию охраны Swift? Например, если я хочу проверить два значения параметра option, то nil использовать guard, как я должен делать это, используя инструкцию single guard?
Множественные условия в секретном заявлении быстро
Ответ 1
//Проверяем этот код
func demo(){
var str = [String: String]()
str["status"] = "blue"
str["asd"] = nil
guard let var2 = str["asd"], let var1 = str["status"]
else
{
print("asdsfddffgdfgdfga")
return
}
print("asdasdasd")
}
//Охрана проверит одно за другим условие. если first равно true, то будет проверено следующее, иначе будет выполнена другая часть
Ответ 2
Чтобы ответить на вопрос Прабхава, да, вы правы, каждое условие в защитном утверждении должно быть истинным, чтобы продолжить (т.е. Не входить в блок else). В этом смысле это действительно похоже на разделение условий с помощью логики AND.
Вы можете реализовать логику ИЛИ, не используя запятые, а используя логическое условие:
guard
true || false // this guard statement evaluates to true
else
{
print("no, not all values in the guard were true")
return
}
print("yes, all of the values in the guard were true") // this is printed
или комбинация логики "ИЛИ" и "И", используя комбинацию логических условий и необязательных привязок:
let testString: String? = nil
guard
true || false,
let x = testString, // this guard statement evaluates to false
true
else
{
print("no, not all values in the guard were true") // this is printed
return
}
print("yes, all of the values in the guard were true")
Это резюме от Apple, написанное о необязательных привязках, если заявления одинаково применимы к защитным заявлениям:
Вы можете включить столько необязательных привязок и логических условий в один оператор if, сколько вам нужно, через запятую. Если какое-либо из значений в необязательных привязках равно nil или какое-либо логическое условие оценивается как ложное, условие целого оператора if считается ложным. Следующие операторы 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"