English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой статье вы узнаете, как использовать управляющую строку для управления потоком выполнения программы.
Swift If строкаОписание того, как выполнять действия на основе определенного условия (булева стоимости). В этой статье мы изучим преимущества управляющей строки перед строкой if для управления потоком программы и написания более простого и чистого кода.
Основное назначение управляющей строки - это передача управления программы за пределы диапазона при условии. Эти строки аналогичны строкам if, которые выполняются на основе определенного условия (булева стоимости), но в отличие от if, управляющая строка выполняется только при несоответствии определенным условиям.
Кроме того, управляющая строка должна выйти из диапазона. Поэтому我们必须 использовать управляющие строки пользователя return, break, continue или throw в конце управляющей строки.
guard expression else { //Строка //Важно включить управляющее выражение: return, break, continue или throw.
Здесь expression - это булево выражение (возвращает true или false).
Если значение expression вычисляется как false, то выполняются инструкции внутри блока кода.
Если значение expression вычисляется как true, то инструкция guard внутри блока кода пропускается.
Примечание: завершение инструкции guard должно содержать управляющую инструкцию return, break, continue или throw.
Примерная эффективная инструкция guard:
guard true else { print("Условие не выполнено") print("Условие выполнено")
При выполнении этого программного обеспечения выводится:
Условие выполнено
В предыдущем примере, guard содержит булево значение true (условие выполнено). Поскольку инструкция guard выполняется только при невыполнении условия, инструкции внутри guard не выполняются. Это объясняет, почему выполняется print("Условие выполнено") и выводится на экран.Условие выполненопоэтому.
Теперь измените условие на false:
guard false else { print("Условие не выполнено") print("Условие выполнено")
В предыдущем примере, результат вычисления условия защиты равен false. Поэтому должно выполняться инструкции print("Condition not met") в else. Но вы получите сообщение об ошибке:Тело 'guard' не может быть пропущено, рассмотрите возможность использования 'return' или 'throw', чтобы выйти из области.
Сообщение об ошибке означает, что вам нужно использовать инструкции return, break, continue или throw, чтобы передать управление из инструкции guard. Теперь мы используем return. Поскольку инструкция return может использоваться только внутри функции, мы заключаем上面的 код в функцию Swift.
Мы можем использовать в Swift:Внутри функцииИспользование инструкции guard, например:
func someFunction() { guard false else { print("Условие не выполнено") return print("Условие выполнено") someFunction() print("Выводится "Hello" после вызова функции")
Когда вы запустите приведенный выше пример программы, вывод будет:
Условие не выполнено Выводится "Hello" после вызова функции.
В предыдущем примере, результат вычисления условия guard равен false, поэтому выполняются инструкции внутри guard. Первая инструкция print("Условие не выполнено") выводится в консоли.:Условие не выполняется.
и оператор return завершает выполнение функции, в то время как оператор print("Hello, after function call") выполняется после вызова функции и выводится в консоли:Вызов функции выводит Hello.
Мы вВ Swift OptionalsМы уже видели, как использовать if-let для распаковки Optional. Однако мы также можем использовать оператор guard вместо if-let для распаковки опциональных выражений, что имеет несколько преимуществ. Основным преимуществом использования guard вместо if-let для распаковки опциональных переменных является то, что мы можем увеличить область действия распакованных переменных.
Давайте посмотрим на это на примере ниже:
func changeOptionalStringToUpperCase() { var name: String? guard let temp = name else { print("Название равно nil. Не может быть обработано") return print("Верхний регистр:\(temp.uppercased())") changeOptionalStringToUpperCase()
Когда вы запустите приведенный выше пример программы, вывод будет:
Название равно nil. Не может быть обработано
В上面的 программе вы можете увидеть, что распакованное значение temp используется за пределами области действия оператора guard. Поскольку name определено как опциональное и содержит значение nil, оператор guard не может распаковать это значение.
Таким образом, в операторе guard else выполняются следующие инструкции: "Name равно nil. Не может быть обработано", и функция завершается с помощью оператора return. Эквивалентный код для вышеуказанного оператора guard if else:
func changeOptionalStringToUpperCase() { var name: String? if let temp = name { print("Верхний регистр:\(temp.uppercased())") } print("Название равно nil. Не может быть обработано") return //Как получить доступ здесь? Решение: использовать guard changeOptionalStringToUpperCase()
Обратите внимание, что оба вышеуказанных оператора являются действительными и выполняют одну и ту же работу. Однако при использовании оператора if-let не рекомендуется использовать распакованные (unwrapped) значения вне оператора if-let. Но с использованием оператора guard, вы можете использовать распакованные значения через функцию.
Условные операторы guard могут связывать несколько условий, разделенных запятыми (,), как показано ниже:
func changeOptionalStringToUpperCase() { var name: String? = "" guard let temp = name, temp.count > 0 else { print("Название равно nil или пустой строке. Не может быть обработано") return print("Uppercased:\(temp.uppercased())") changeOptionalStringToUpperCase()
Когда вы запустите приведенный выше пример программы, вывод будет:
Имя nil или пустая строка. Не может быть обработано
В приведенном выше примере инструкции guard содержат две условия, разделенные запятой.
Первая условие let temp = name解开了一个可选 параметр, в нашем примере, это условие возвращает true, вторая условие temp.count > 0 проверяет, содержит ли расщепленный строка более 0 символов, в нашем примере результат false.
Следовательно, выражения в инструкции guard выполняются print("Имя nil или пустая строка. Не может быть обработано") Имя nil или пустая строка. Не может быть обработано в консоли, и функция завершается с помощью инструкции return.