Protocol

Error

A type representing an error value that can be thrown. スローされることが可能なあるエラー値を表している型。

Declaration 宣言

protocol Error

Overview 概要

Any type that declares conformance to the Error protocol can be used to represent an error in Swift’s error handling system. Because the Error protocol has no requirements of its own, you can declare conformance on any custom type you create. Errorプロトコルへの準拠を宣言するあらゆる型は、エラーをSwiftのエラー処理システムにおいて表すために使われることができます。Errorプロトコルはそれ自身の要件を持たないので、あなたは準拠を宣言することがあなたが作成するあらゆるあつらえの型で可能です。

Using Enumerations as Errors 列挙をエラーとして使う

Swift’s enumerations are well suited to represent simple errors. Create an enumeration that conforms to the Error protocol with a case for each possible error. If there are additional details about the error that could be helpful for recovery, use associated values to include that information. Swiftの列挙は、単純なエラーを表すのによく適します。Errorプロトコルに準拠する列挙を、各ありうるエラーに対して1つのケース節で作成してください。復旧の助けになりうるそのエラーについての追加の詳細があるならば、関連値を使ってその情報を含めてください。

The following example shows an IntParsingError enumeration that captures two different kinds of errors that can occur when parsing an integer from a string: overflow, where the value represented by the string is too large for the integer data type, and invalid input, where nonnumeric characters are found within the input. 以下の例は、IntParsingError列挙を示します、それが捕える(キャプチャ)のは、文字列から整数を構文解析(パース)する時に起こる可能性のある2つの異なる種類のエラー:文字列によって表される値が整数データ型に対して大きすぎるところのオーバーフロー、そして非数の文字が入力内に見つけられるところの無効な入力です。


enum IntParsingError: Error {
    case overflow
    case invalidInput(Character)
}

The invalidInput case includes the invalid character as an associated value. invalidInputケース節は、無効な文字を関連値として含みます。

The next code sample shows a possible extension to the Int type that parses the integer value of a String instance, throwing an error when there is a problem during parsing. 次のコード例が示すのは、Int型に対する1つの可能な拡張で、それはStringインスタンスの整数値をパースして、パースの間に問題がある時はエラーをスローします。


extension Int {
    init(validating input: String) throws {
        // ...
        let c = _nextCharacter(from: input)
        if !_isValid(c) {
            throw IntParsingError.invalidInput(c)
        }
        // ...
    }
}

When calling the new Int initializer within a do statement, you can use pattern matching to match specific cases of your custom error type and access their associated values, as in the example below. この新しいIntイニシャライザをdo文内部で呼び出すとき、あなたはパターンマッチを使ってあなたのあつらえのエラー型のそれぞれ詳述なケース節と照合して、それらの関連値にアクセスします、下の例でのように。


do {
    let price = try Int(validating: "$100")
} catch IntParsingError.invalidInput(let invalid) {
    print("Invalid character: '\(invalid)'")
} catch IntParsingError.overflow {
    print("Overflow error")
} catch {
    print("Other error")
}
// Prints "Invalid character: '$'"

Including More Data in Errors さらなるデータをエラーに含める

Sometimes you may want different error states to include the same common data, such as the position in a file or some of your application’s state. When you do, use a structure to represent errors. The following example uses a structure to represent an error when parsing an XML document, including the line and column numbers where the error occurred: 時にはあなたは、いくらかの異なるエラー状態をこの同じ通常のデータに含めたいかもしれません、例えばあるファイル中の位置やあなたのアプリケーションの何らかの状態など。あなたがそうする場合は、構造体を使ってエラーを表してください。以下の例は、構造体を使ってXML書類をパースする時にエラーを表して、行およびコラム番号をエラーが生じたときに含めます:


struct XMLParsingError: Error {
    enum ErrorKind {
        case invalidCharacter
        case mismatchedTag
        case internalError
    }


    let line: Int
    let column: Int
    let kind: ErrorKind
}


func parse(_ source: String) throws -> XMLDoc {
    // ...
    throw XMLParsingError(line: 19, column: 5, kind: .mismatchedTag)
    // ...
}

Once again, use pattern matching to conditionally catch errors. Here’s how you can catch any XMLParsingError errors thrown by the parse(_:) function: 再び、パターンマッチを条件付きでエラーを捕まえるのに使ってください。ここにあるのは、あなたがparse(_:)関数によってスローされる何らかのXMLParsingErrorエラーを捕まえる方法です:


do {
    let xmlDoc = try parse(myXMLData)
} catch let e as XMLParsingError {
    print("Parsing error: \(e.kind) [\(e.line):\(e.column)]")
} catch {
    print("Other error: \(error)")
}
// Prints "Parsing error: mismatchedTag [19:5]"

Topics 話題

Describing an Error エラーを記述する

See Also 参照

User-Relevant Errors ユーザ関連のエラー