Типы 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 — локальная установка не требуется.
Все уроки этого курса
- Цепочки optional и основы обработки ошибок
- do/catch и определение ошибок (перечисления)
- Типы Result — Result