Ответ
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)
}