0Pricing
Swift Academy · Урок

Логирование, assert/precondition/fatalError

Записывайте состояние с помощью print/debugPrint и выбирайте между assert (только в режиме отладки), precondition (проверяется в релизе) и fatalError (аварийное завершение) для проверки инвариантов.

«Логирование, assert/precondition/fatalError» — бесплатный урок Swift Academy на CoddyKit. Это урок 2 из 2. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 2 уроков всего.

Инструменты диагностики

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

  • Утверждение: проверки только в режиме отладки;
  • Предварительное условие: проверяется также в выпускной сборке;
  • fatalError: немедленно останавливает выполнение.

Простое журналирование

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

let user = ["name": "Ana", "role": "admin"]
print("User:", user)            // user-friendly
debugPrint("User:", user)       // includes type details when available

let point = (x: 3, y: 5)
print("Point:", point)
debugPrint("Point:", point)

Утверждение (только в режиме отладки)

Утверждение останавливает программу в режиме отладки, если условие ложно; в оптимизированных выпускных сборках оно удаляется.

// Even numbers only (demo)
func half(of x: Int) -> Int {
    assert(x % 2 == 0, "Expected even number, got \(x)")
    return x / 2
}
print(half(of: 8))   // OK in Debug/Release
// In Debug, failing the assert would stop and print the message.
// In Release, assert checks are disabled by default.

Предварительное условие (проверяется в выпускной сборке)

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

// Safe divide with required precondition
func safeDivide(_ a: Int, by b: Int) -> Int {
    precondition(b != 0, "Divider must be nonzero")
    return a / b
}
print(safeDivide(10, by: 2))    // 5
// If called with 0, precondition fails in Debug and Release.

fatalError (немедленная остановка)

fatalError немедленно останавливает выполнение и выводит сообщение. Используйте его для недостижимых ветвей кода или ещё не реализованной функциональности во время разработки.

enum FileKind { case text, binary }

func open(kind: FileKind) {
    switch kind {
    case .text:
        print("Open text mode")
    case .binary:
        print("Open binary mode")
    // If we ever add a new case and forget to handle it, we could use:
    // default: fatalError("Unsupported file kind")
    }
}
open(kind: .text)

Когда что использовать

Рекомендации:

  • Вывод и debugPrint — для быстрых записей в журнал (позже удалите их или включайте только по флагу).
  • Утверждения — для проверок разработчика только в режиме отладки.
  • Предварительные условия — когда программа не должна продолжать работу в любой сборке, если требование не выполнено.
  • fatalError — для недостижимых или ещё не реализованных ветвей.

Диагностика с проверкой в выпускной сборке

Быстрая проверка: какая диагностика также проверяется в выпускных сборках?

Повторение

Повторение: ведите журнал с помощью вывода и debugPrint, защищайте инварианты утверждениями (в режиме отладки), предварительными условиями (также в выпускной сборке) и используйте fatalError для действительно недостижимых состояний.

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

Урок «Логирование, assert/precondition/fatalError» бесплатный?

Да — полный текст урока «Логирование, assert/precondition/fatalError» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 2 уроков всего.

Чему я научусь в уроке «Логирование, assert/precondition/fatalError»?

Записывайте состояние с помощью print/debugPrint и выбирайте между assert (только в режиме отладки), precondition (проверяется в релизе) и fatalError (аварийное завершение) для проверки инвариантов. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

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

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

Сколько времени занимает урок «Логирование, assert/precondition/fatalError»?

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

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

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

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

  1. Основы XCTest (цели, фикстуры)
  2. Логирование, assert/precondition/fatalError
← Назад к Swift Academy