Guard let
Часть раздела Основы путешествия по Swift на Coddy — урок 13 из 86.
В то время как if let извлекает опциональное значение и выполняет код, когда значение существует, guard let использует противоположный подход — он выполняет ранний выход, если значение отсутствует. Это особенно полезно внутри функций, где вы хотите сначала обработать «плохой» сценарий и сохранить основную логику чистой.
func greet(name: String?) {
guard let unwrappedName = name else {
print("No name provided")
return
}
print("Hello, \(unwrappedName)!")
}
greet(name: "Taylor") // Привет, Taylor!
greet(name: nil) // Имя не указаноИнструкция guard let проверяет, содержит ли name значение. Если нет, выполняется блок else, и функция завершается с помощью return. Если опционал содержит значение, оно извлекается в unwrappedName — и в этом заключается ключевое отличие от if let: извлеченная переменная остается доступной до конца функции, а не только внутри блока.
Этот паттерн «раннего выхода» (early exit) делает ваш код читаемым, обрабатывая случаи ошибок заранее, чтобы основная логика не была вложена в несколько операторов if.
Задание
ЛегкоНапишите функцию validateAge, которая принимает опциональный параметр age и использует guard let для его безопасного извлечения.
Если возраст равен nil, верните "Invalid age". В противном случае верните "Age: [value]", где [value] — это извлеченное значение возраста.
Параметры:
age(Int?): Опциональное целое число, представляющее возраст человека
Возвращает: Строка — либо "Invalid age", если входное значение равно nil, либо "Age: [value]" с извлеченным значением.
Пример: Если age равно 25, верните "Age: 25". Если age равно nil, верните "Invalid age".
Шпаргалка
Используйте guard let для извлечения опционального значения и раннего выхода, если значение отсутствует:
func greet(name: String?) {
guard let unwrappedName = name else {
print("No name provided")
return
}
print("Hello, \(unwrappedName)!")
}Инструкция guard let проверяет, содержит ли опционал значение. Если нет, выполняется блок else, который завершает выполнение функции с помощью return. Если опционал содержит значение, оно извлекается и остается доступным в остальной части области видимости функции.
Этот паттерн «раннего выхода» обрабатывает ошибочные случаи заранее, сохраняя основную логику чистой и без лишних отступов.
Попробуйте сами
func validateAge(age: Int) -> String {
// Напишите код здесь
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияСоставное присваиваниеПовторение: Простая математикаОператоры сравнения7Основы ввода-вывода
Функция PrintИнтерполяция строкВвод через ReadLineПреобразование типовПовторение — до 120Повторение — True или False10Функции
Объявление функцииПараметры и аргументыВозвращаемые значенияМетки аргументовПовторение: функция SigmaПовторение: функция валидацииЗначения по умолчанию13Итерирование по последовательностям
Итерирование по элементамМетод enumerateИтерирование по строкам, ч. 1Итерирование по строкам, ч. 22Переменные
Let против VarАннотации типовЧислаСтрокиBooleanСоглашения об именованииИтоги — Инициализация переменных5Операторы. Часть 2
Логические операторы. Часть 1Логические операторы. Часть 2Повторение: простая логикаЛогические операторы. Часть 3Тернарный оператор8Калькулятор разделения счета
Приветственное сообщениеПолучение ввода14Массивы: Продвинутый уровень
Срезы массивов. Часть 1Срезы массивов. Часть 2Операторы последовательностейМетод Contains3Опционалы
Что такое опционалыРазвертывание с помощью if letGuard letОператор объединения с nilИтоги — безопасное развертывание6Принятие решений
Оператор IfКонструкция If - ElseПовторение — Простой калькуляторОператор SwitchSwitch с диапазонами9Циклы
Цикл For-InЦикл WhileЦикл Repeat-WhileBreakContinueПовторение: ФакториалДиапазоны в циклахВложенные циклыПовторение: Динамический ввод