... > Swift > Обработка ошибок do-try-catch...

Обработка ошибок do-try-catch в Swift

НАВИГАЦИЯ ПО СТРАНИЦЕ

Базовый синтаксис Обработка разных типов ошибок Оператор try? и try! Throwing функции Передача ошибки вверх

В Swift обработка ошибок осуществляется с использованием конструкции do-try-catch. Этот механизм позволяет элегантно обрабатывать ошибки, которые могут возникнуть в процессе выполнения программы.

Базовый синтаксис:

do {
    // код, который может вызвать ошибку
    try someThrowingFunction()
} catch {
    // обработка ошибки
    print("Произошла ошибка: \(error)")
}
  1. `do` блок: В этом блоке помещается код, который может вызвать ошибку.

  2. `try` оператор: Он используется перед вызовом функции или метода, который может бросить ошибку. Если функция вызывается без try, это будет считаться ошибкой на уровне компиляции.

  3. `catch` блок: В этом блоке указывается код для обработки ошибки. Переменная error содержит информацию об ошибке.

Обработка разных типов ошибок:

enum CustomError: Error {
    case notFound
    case invalidInput(message: String)
}

do {
    try someThrowingFunction()
} catch CustomError.notFound {
    print("Объект не найден")
} catch CustomError.invalidInput(let message) {
    print("Недопустимый ввод: \(message)")
} catch {
    print("Произошла неизвестная ошибка: \(error)")
}

Оператор try? и try!:

`try?`: Преобразует результат вызова функции, бросающей ошибку, в опционал. Если функция бросает ошибку, возвращается nil.

let result = try? someThrowingFunction()

`try!`: Используется, когда вы уверены, что функция не будет бросать ошибку. В противном случае, это приведет к фатальной ошибке во время выполнения.

let result = try! someThrowingFunction()

Throwing функции:

Для того чтобы функция могла бросать ошибку, она должна быть объявлена с использованием ключевого слова throws. Пример:

enum FileError: Error {
    case fileNotFound
    case fileCorrupted
}

func readFile() throws -> String {
    // код для чтения файла
    throw FileError.fileNotFound
}

Передача ошибки вверх по стеку вызовов:

func processFile() throws {
    do {
        let content = try readFile()
        // обработка прочитанного файла
    } catch {
        throw error  // передача ошибки вверх по стеку вызовов
    }
}

Обработка ошибок в Swift предоставляет эффективный и гибкий механизм для работы с ошибками, который позволяет разработчикам создавать надежные и устойчивые программы. Внимательное использование do-try-catch конструкции помогает управлять ошибками и предоставляет четкий код обработки ошибок.