Логирование, 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 — локальная установка не требуется.
Все уроки этого курса
- Основы XCTest (цели, фикстуры)
- Логирование, assert/precondition/fatalError