#11 Swiftで学ぶエラーハンドリングの基本
Swiftのエラーハンドリングは、「エラーを投げる可能性がある」ことを関数の宣言に明示する、独自の仕組みを持っています。この記事では、Swiftにおけるエラーハンドリングの基本と、独自エラーの定義方法を解説します。
独自のエラーを定義する
Swiftでは、Errorプロトコルに準拠したenumでエラーの種類を定義するのが一般的です。
enum MyError: Error {
case divideByZero
case invalidInput
}
throwsという宣言
エラーを投げる可能性がある関数には、throwsというキーワードを付けます。
func divide(a: Int, b: Int) throws -> Int {
if b == 0 {
throw MyError.divideByZero
}
return a / b
}
do・try・catchで扱う
throwsが付いた関数を呼び出すには、do・try・catchという組み合わせを使います。
do {
let result = try divide(a: 10, b: 0)
print(result)
} catch MyError.divideByZero {
print("0では割れません")
} catch {
print("その他のエラーが発生しました")
}
関数呼び出しの前にtryを付ける必要がある点が、他の言語とは違うSwiftらしい特徴です。catchにエラーの種類を指定すれば、特定のエラーだけを個別に処理できます。
try?という便利な書き方
結果が失敗してもよい場合は、try?を使うと、失敗時にnilを返す形で簡潔に書けます。
let result = try? divide(a: 10, b: 0)
try!で強制的に成功を前提とする
「絶対に失敗しないはず」と確信している場合、try!を使うと強制的に結果を取り出せます。ただし、実際にエラーが発生した場合はその場でプログラムが停止するため、使用には注意が必要です。
Resultで成功・失敗を値として表す
非同期処理などでは、throwsの代わりにResult型を使って成功・失敗を表現することもあります。
func fetchData(completion: (Result) -> Void) {
completion(.success("データ"))
}
fetchData { result in
switch result {
case .success(let data): print(data)
case .failure(let error): print("失敗: \(error)")
}
}
Swiftならではの注意点
throwsが付いていない関数は、そもそもエラーを投げられません。「エラーハンドリングが必要な関数かどうか」が、関数の宣言を見ただけで分かるのが、Swiftの安全性を支える設計です。
まとめ
Swiftのエラーハンドリングはthrows・do・try・catchが基本です。try?のような簡潔な書き方や、enumによる独自エラーの定義も状況に応じて活用しましょう。
本ページはプロモーションを含みます。
参考書籍(PR)
Swiftをもっと学びたい方には「これからつくる iPhoneアプリ開発入門」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿