do/catch и определение ошибок (перечисления)
Определяйте перечисления ошибок, выбрасывайте их из функций и обрабатывайте сбои с помощью конструкций do/catch (конкретные варианты, catch let, общий catch).
«do/catch и определение ошибок (перечисления)» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 3 уроков всего.
Обзор
Этот урок посвящён определению типизированных ошибок и их обработке. Вы создадите перечисление для ошибок и будете перехватывать отдельные случаи, чтобы обеспечить понятные способы восстановления.
Перечисление ошибок
Определите пользовательское перечисление, соответствующее протоколу Error. Связанные значения добавляют полезный контекст.
enum FileError: Error {
case notFound(path: String)
case unreadable(path: String)
case corrupted
}
print("Defined FileError enum")Основы выбрасывания ошибок
Помечайте функции, которые могут завершиться ошибкой, как выбрасывающие ошибки. Выбрасывайте конкретные случаи, если предварительные условия не выполнены.
func loadText(from path: String) throws -> String {
if path.isEmpty { throw FileError.notFound(path: "(empty)") }
if !path.hasSuffix(".txt") { throw FileError.unreadable(path: path) }
return "Contents of " + path
}
print("Ready to throw on bad input")Выборочная обработка ошибок
Используйте конструкцию обработки ошибок. Сначала размещайте конкретные случаи перехвата, а затем общий случай для остальных ошибок.
do {
let text = try loadText(from: "notes.txt")
print(text)
} catch FileError.notFound(let p) {
print("Missing file at:", p)
} catch FileError.unreadable(let p) {
print("Cannot read:", p)
} catch {
print("Other error:", error)
}Перехват ошибки и выбор случая
Используйте перехват ошибки как YourError, а затем switch, чтобы формировать понятные пользователю сообщения.
do {
_ = try loadText(from: "")
} catch let error as FileError {
switch error {
case .notFound(let p): print("not found:", p)
case .unreadable(let p): print("unreadable:", p)
case .corrupted: print("file corrupted")
}
} catch {
print("unexpected:", error.localizedDescription)
}Восстановление или повторная передача ошибки
Решите, следует ли восстановить работу, вернув запасное значение, или передать ошибку дальше вызывающему коду. Правила должны оставаться простыми и предсказуемыми.
func mustLoad(_ path: String) throws -> String {
do {
return try loadText(from: path)
} catch FileError.notFound {
// simple recovery: default content
return "New file template"
} catch {
// escalate unknown issues
throw error
}
}
print(try? mustLoad("report.txt") ?? "(nil)")Шаблон пользовательских ошибок
Быстрая проверка: как принято определять пользовательские ошибки?
Итоги
Итоги: определяйте типизированные ошибки с помощью перечисления, соответствующего Error, выбрасывайте точные случаи и обрабатывайте их конструкциями обработки ошибок, размещая конкретные ветви перед общей.
Часто задаваемые вопросы
Урок «do/catch и определение ошибок (перечисления)» бесплатный?
Да — полный текст урока «do/catch и определение ошибок (перечисления)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 3 уроков всего.
Чему я научусь в уроке «do/catch и определение ошибок (перечисления)»?
Определяйте перечисления ошибок, выбрасывайте их из функций и обрабатывайте сбои с помощью конструкций do/catch (конкретные варианты, catch let, общий catch). Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Swift Academy?
Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 3.
Сколько времени занимает урок «do/catch и определение ошибок (перечисления)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Swift Academy?
Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Цепочки optional и основы обработки ошибок
- do/catch и определение ошибок (перечисления)
- Типы Result — Result