0Pricing
Swift Academy · Урок

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 — локальная установка не требуется.

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

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