Обработка ошибок в Swift позволяет функциям выбрасывать, распространять и восстанавливаться после ошибок во время выполнения, используя четыре ключевых компонента: throws, try, catch и протокол Error.
Функция, которая может завершиться ошибкой, должна быть отмечена ключевым словом throws в своей сигнатуре. Пользовательские типы ошибок обычно соответствуют протоколу Error, чаще всего через enum-ы:
enum NetworkError: Error {
case notFound
case unauthorized
}
func fetchData() throws -> Data {
throw NetworkError.notFound
}
Функции, которые могут выбрасывать ошибки, необходимо вызывать с try внутри блока do-catch, что позволяет тебе обрабатывать конкретные случаи ошибок:
do {
let data = try fetchData()
} catch NetworkError.notFound {
print("Resource not found")
} catch {
print("Unexpected error: \(error)")
}
try — стандартное использование внутри блока do-catch; ошибки должны быть явно обработаныtry? — преобразует результат в опциональное значение; возвращает nil если выброшена ошибка, молча её игнорируяtry! — принудительно разворачивает результат; падает во время выполнения если выброшена ошибка — используй только когда ошибка буквально невозможнаlet result = try? fetchData() // Data? — nil при ошибке
let result = try! fetchData() // Data — падает при ошибке
try с do-catch для безопасной, явной обработки ошибокtry? когда ошибка приемлема и тебе не нужны детали ошибкиtry! в продакшн-коде, если ты не абсолютно уверен, что ошибка никогда не произойдётПротокол Error в Swift обычно реализуется с помощью enum для определения пользовательских типов ошибок, которые могут выбрасываться функциями.
Новый — ещё не проверен сообществом
Вы