Swift:
Обробка помилок
Як це робити:
Swift використовує обробку помилок з блоками do
, try
та catch
. Давайте розглянемо:
enum FileError: Error {
case fileDoesNotExist
case noPermission
}
func readFile(atPath path: String) throws -> String {
// Уявімо, що у нас є деяка логіка тут для перевірки, чи файл існує та чи маємо право його читати
let fileExists = false
let havePermission = true
if !fileExists {
throw FileError.fileDoesNotExist
}
if !havePermission {
throw FileError.noPermission
}
return "Зміст файлу йде сюди"
}
do {
let fileContent = try readFile(atPath: "/path/to/file")
print(fileContent)
} catch FileError.fileDoesNotExist {
print("Ой! Файл не знайдено.")
} catch FileError.noPermission {
print("Ах! Немає доступу для читання файлу.")
} catch {
print("Сталася невідома помилка.")
}
Приклад виводу:
Ой! Файл не знайдено.
Поглиблений розгляд
Обробка помилок не завжди була такою крутою, як зараз. У Objective-C ви мали справу з покажчиками на об’єкти NSError, що здавалось незграбним. Тепер у нас є елегантніша система зі Swift-перечисленнями та протоколом Error
.
throw
у Swift дозволяє нам сигналізувати про те, що щось пішло не так. Блоки do
діють як сфери, що свідомі помилок, префікс try
викликає ризиковані операції, а catch
впорається з речами, якщо вони підуть не так.
Опціонали — це альтернатива для ситуацій, які не зовсім “помилкові”, але все ж можуть мати “ніякого результату”. Вони трохи схожі на змінні Шрьодінгера — у них є значення або його немає.
Для дійсного заглиблення, перевірте типи Result
, які є модними гібридами між звичайним поверненням та шаблонами помилок.
Дивіться також
- Офіційний посібник по обробці помилок Swift: Apple Docs
- Кращі практики обробки помилок Swift: RayWenderlich.com
- Просунута обробка помилок у Swift: Стаття на Medium