Что такое Error в Swift?

«Что такое Error в Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Error — это тип, представляющий ошибки времени выполнения в Swift. Все ошибки соответствуют протоколу Error.

Базовый пример с enum:

enum NetworkError: Error {
    case invalidURL
    case timeout(seconds: Int)
    case serverError(statusCode: Int)
}

// Функция, которая может выбросить ошибку
func fetchData(from urlString: String) throws -> Data {
    guard let url = URL(string: urlString) else {
        throw NetworkError.invalidURL
    }
    // ... реализация запроса
}

Обработка ошибок:

do {
    let data = try fetchData(from: "https://api.example.com")
    process(data)
} catch NetworkError.timeout(let seconds) {
    print("Таймаут через (seconds) секунд")
} catch NetworkError.serverError(let code) where code == 500 {
    print("Внутренняя ошибка сервера")
} catch {
    print("Неизвестная ошибка: (error.localizedDescription)")
}

Сокращённые формы:

// try? — возвращает nil при ошибке
if let data = try? fetchData(from: urlString) { /* обработка */ }

// try! — принудительное извлечение (крашнет при ошибке)
let data = try! fetchData(from: guaranteedValidURL)

// defer — гарантированное выполнение кода
func readFile() throws -> String {
    let file = openFile()
    defer { closeFile(file) } // Выполнится в любом случае
    return try parseFile(file)
}