Swift:
エラー処理

方法:

Swiftはエラー処理にdotrycatchブロックを使用します。見てみましょう:

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のenumとErrorプロトコルを使ったより洗練されたシステムを持っています。

Swiftのthrowを使って何か問題が起こったことを伝えることができます。doブロックはエラー認識領域として機能し、tryはリスクのあるビジネス呼び出し、catchは物事がうまくいかなかった場合にそれを処理します。

オプショナルは"エラー"ではないがそれでも"結果なし"という可能性がある状況のための代替手段です。これらはシュレーディンガーの変数のようなものです—値を持っているか、持っていないかのどちらかです。

より深く知るためには、通常の戻り値とエラーパターンの間の素敵なハイブリッドであるResult型をチェックしてみてください。

参照も参照