エラー型の定義

Swiftにおけるエラー処理では、「エラー型の定義」が重要な要素となります。Swiftでは、エラーを表すためにErrorプロトコルに準拠した型を定義し、その型を用いてエラーをスロー(throw)することで、例外的な状況を呼び出し元に通知することができます。


エラー型の定義の基本

Swiftでは、**列挙型(enum)**を使ってエラーの種類を定義するのが一般的です。これは、複数の異なるエラーケースを分かりやすく表現できるためです。定義した列挙型にはErrorプロトコルを準拠させる必要があります。

例:ファイル操作のエラー型定義

swift
enum FileError: Error { case fileNotFound case unreadable case encodingFailed }

この例では、FileErrorという列挙型を定義し、3つのエラーケースを用意しています。Errorプロトコルに準拠しているため、これらのケースはエラーとして使用できます。


エラー型に関連情報を持たせる

各ケースに**関連値(associated value)**を持たせることで、追加情報を含めることも可能です。

例:詳細情報を持つエラー型

swift
enum NetworkError: Error { case badURL(String) case requestFailed(Int) case unknown(Error) }
  • badURLは不正なURLを文字列で保持

  • requestFailedはステータスコードなどの数値を保持

  • unknownは他のError型を保持

これにより、呼び出し側はエラーの原因をより詳細に把握できます。


エラー型の使用例

エラー型は、throws関数と組み合わせて使用されます。

swift
func readFile(name: String) throws -> String { guard name == "document.txt" else { throw FileError.fileNotFound } return "ファイルの内容" }

呼び出し元では、do-catch構文でエラーを捕捉します。

swift
do { let contents = try readFile(name: "data.txt") print(contents) } catch FileError.fileNotFound { print("ファイルが見つかりません") } catch { print("その他のエラー: \(error)") }

補足:Errorはプロトコル

SwiftのError空のプロトコルです。特別な要件はなく、準拠するだけでthrowcatchの対象として扱えるようになります。


まとめ

  • SwiftではErrorプロトコルに準拠した型を定義してエラーを表現する。

  • 一般的にenumを使って複数のエラーケースを定義する。

  • 関連値を用いて詳細な情報を保持できる。

  • throws関数とdo-catch構文を組み合わせてエラー処理を行う。

生成日:2025/05/04