Содержание
Цель
Добавить обработку ошибок в проект на Swift.
Примеры кода
В самом простом случае можно обработать ошибку преобразовав ее в опциональное значение:
if let contents = try? String(contentsOfFile:"/etc/noExistingFile") {
print(contents)
} else {
print("No existing file")
}
Перечисления в Swift особенно хорошо подходят для группировки схожих между собой условий возникновения ошибок.
import Foundation
enum FileHandlingError: Error {
case fileNotFound
}
do {
guard let contents = try? String(contentsOfFile: "/etc/noExistingFile") else {
throw FileHandlingError.fileNotFound
}
print(contents)
} catch FileHandlingError.fileNotFound {
print("No existing file")
}
Заменить /etc/noExistingFile
на /etc/hosts
для примера отображения содержимого файла.
Комментарий к коду
В инструкции do-catch
расположен код, который пытается получить данные из файла в виде строки. Если такого файла несуществует вызывается соответствующий обработчик.FileHandlingError.fileNotFound
обрабатывает только случай отсутствия файла, все остальные случае могут быть обработаны пустым условием catch
без шаблона и получение ошибки в локальной переменной error
. Пример:
catch {
print("Неожиданная ошибка: (error).")
}
Заметка
В отличие от обработки исключений во многих языках, в том числе и в Objective-C- обработка ошибок в Swift не включает разворачивание стека вызовов, то есть процесса, который может быть дорогим в вычислительном отношении.
ToDo
- Добавить пример с инструкцией
do-catch
с большим количеством обработчиков. - Добавить пример и провести сравнительный анализ для
NSError
. - Добавить простой пример обработки ошибок для SwiftUI.
Добавить комментарий