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, які є модними гібридами між звичайним поверненням та шаблонами помилок.

Дивіться також