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のenumとError
プロトコルを使ったより洗練されたシステムを持っています。
Swiftのthrow
を使って何か問題が起こったことを伝えることができます。do
ブロックはエラー認識領域として機能し、try
はリスクのあるビジネス呼び出し、catch
は物事がうまくいかなかった場合にそれを処理します。
オプショナルは"エラー"ではないがそれでも"結果なし"という可能性がある状況のための代替手段です。これらはシュレーディンガーの変数のようなものです—値を持っているか、持っていないかのどちらかです。
より深く知るためには、通常の戻り値とエラーパターンの間の素敵なハイブリッドであるResult
型をチェックしてみてください。
参照も参照
- 公式Swiftエラー処理ガイド:Appleドキュメント
- Swiftエラー処理のベストプラクティス:RayWenderlich.com
- Swiftでの高度なエラー処理:Medium記事