Menu
Coddy logo textTech

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.

challenge icon

Задание

Легко

Напишите функцию 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 {
    // Напишите код здесь
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы