プロトコル


Error


throw される可能性のあるエラー値を表す型。


iOS 8.0+ iPadOS 8.0+ Mac Catalyst 13.0+ macOS 10.10+ tvOS 9.0

visionOS 1.0+ watchOS 2.0+

protocol Error : Sendable




概観


Error プロトコルへの準拠を宣言する全ての型は、Swift のエラー処理システムでエラーを表すために使用できます。Error プロトコルには独自の要件がないため、作成したカスタム型すべてに準拠を宣言できます。



列挙型を Error として使用する


Swift の列挙型は、単純なエラーを表すのに適しています。Error プロトコルに準拠し、考えられるエラーごとにケースを持つ列挙型を作成してください。エラーの回復に役立つ追加の詳細情報がある場合は、関連した値を使用してその情報を含めてください。


以下の例は、文字列から整数を解析するときに発生する 2 種類のエラー (文字列によって表される値が整数データ型に対して大きすぎる場合のオーバーフローと、入力内に数値以外の文字が見つかった場合の無効な入力) をキャプチャする IntParsingError 列挙型を示しています。


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

invalidInput の場合、無効な文字が関連した値として含まれます。


次のコードサンプルは、String インスタンスの整数値を解析し、解析中に問題が発生した場合にエラーを throw する Int 型の拡張例を示しています。


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

do 文内で新しい Int イニシャライザーを呼び出す場合、以下の例のように、パターンマッチングを使用してカスタムエラー型の特定のケースを一致させ、関連した値にアクセスできます。


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: '$'"


エラーにさらに多くのデータを含める


ファイル内の位置やアプリケーションの状態など、共通の同じデータを異なるエラー状態に含めたい場合があります。そのような場合は、構造体を使用してエラーを表現します。以下の例では、XML 文書を解析する際に、エラーが発生した行番号と列番号を含むエラーを表現するために構造体を使用しています。


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

    let line: Int
    let column: Int
    let kind: Kind
}

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

繰り返しになりますが、パターンマッチングを使って条件付きでエラーをキャッチしましょう。parse(_:) 関数によって throw される 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]"




トピックス


エラーの説明


var localizedDescription: String

このエラーのローカライズされた説明を取得します。





関連


以下からの継承


Sendable

SendableMetatype



以下により継承


DistributedActorSystemError



準拠する型


CancellationError

DecodingError

DistributedActorCodingError

EncodingError

ExecuteDistributedTargetError

LocalTestingDistributedActorSystemError

Never

Unicode.UTF8.ValidationError

Unicode.UTF8.ValidationError.Kind





以下も見よ


Error


enum Result

成功または失敗のいずれかを表す値。それぞれのケースに関連した値が含まれます。














トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ












トップへ