0Pricing
Swift Academy · Урок

Типы Result — Result<T, Error>

Представляйте успех или сбой без выбрасывания исключений с помощью Result . Создавайте результаты, перебирайте их через switch, применяйте map/flatMap и преобразуйте их в throws и обратно.

«Типы Result — Result<T, Error>» — бесплатный урок Swift Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 3 уроков всего.

Зачем нужен результат?

Цель: использовать результат<T, ошибка> для явного возврата успеха или сбоя — это особенно удобно для обратных вызовов и программных интерфейсов, избегающих выбрасывания ошибок.

Создание результата

Создавайте .success(значение) или .failure(ошибка) вместо выбрасывания ошибки.

enum ParseError: Error { case badInt }
func parseInt(_ s: String) -> Result<Int, Error> {
    if let n = Int(s) { return .success(n) }
    else { return .failure(ParseError.badInt) }
}
print(parseInt("42"))
print(parseInt("nope"))

Выбор результата

Обрабатывайте исходы с помощью оператора выбора, чтобы пути успеха и сбоя оставались понятными.

let r = parseInt("10")
switch r {
case .success(let n): print("number =", n)
case .failure(let e): print("error:", e)
}

Преобразование результатов

Преобразуйте успешный результат с помощью map, объединяйте операции, создающие результаты, с помощью flatMap, а ошибки адаптируйте через mapError.

let r1 = parseInt("5").map { $0 * 2 }              // Result<Int, Error>
let r2 = parseInt("x").map { $0 * 2 }                    // still .failure
let r3 = parseInt("8").flatMap { n in                    // chain Results
    n % 2 == 0 ? .success(n/2) : .failure(ParseError.badInt)
}
let rErr = parseInt("x").mapError { $0 }                 // transform error type if needed
print(r1, r2, r3, rErr)

Выбрасывание ошибок → результат

Используйте специальную конструкцию, чтобы автоматически сохранить вызов, который может завершиться ошибкой, как результат.

enum LoadError: Error { case notFound }
func load(text name: String) throws -> String {
    guard name == "ok" else { throw LoadError.notFound }
    return "loaded"
}
// Build a Result from a throwing call:
let res = Result { try load(text: "ok") }     // .success("loaded")
let res2 = Result { try load(text: "missing") } // .failure(LoadError.notFound)
print(res, res2)

Результат → выбрасывание ошибок

Вызовите get(), чтобы повторно передать ошибку из результата и вернуться к коду, который выбрасывает ошибки.

let outcome = parseInt("12")
do {
    let value = try outcome.get()   // throws if .failure
    print("value =", value)
} catch {
    print("thrown from get():", error)
}

Значение результата

Быстрая проверка: что представляет собой результат с типом T и ошибкой?

Итоги

Итоги: создавайте значения результата, обрабатывайте их оператором выбора, преобразуйте через map/flatMap/mapError и связывайте с кодом, выбрасывающим ошибки, с помощью инициализатора для преобразования вызова с ошибкой в результат и метода get().

Часто задаваемые вопросы

Урок «Типы Result — Result<T, Error>» бесплатный?

Да — полный текст урока «Типы Result — Result<T, Error>» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 3 уроков всего.

Чему я научусь в уроке «Типы Result — Result<T, Error>»?

Представляйте успех или сбой без выбрасывания исключений с помощью Result . Создавайте результаты, перебирайте их через switch, применяйте map/flatMap и преобразуйте их в throws и обратно. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.

Сколько времени занимает урок «Типы Result — Result<T, Error>»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Цепочки optional и основы обработки ошибок
  2. do/catch и определение ошибок (перечисления)
  3. Типы Result — Result
← Назад к Swift Academy