Подтвердить что ты не робот

Множественные условия в секретном заявлении быстро

Есть ли способ включить несколько условий в инструкцию охраны Swift? Например, если я хочу проверить два значения параметра option, то nil использовать guard, как я должен делать это, используя инструкцию single guard?

4b9b3361

Ответ 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"