Swift は、実行時に回復可能なエラーをスローしてキャッチするための組み込みサポートを提供します。たとえば、コード内のオペレーションが失敗した場合や無効な場合、API は HomeError
エラーをスローします。これにより、回復可能なエラーのみに集中できるため、エラー処理が簡素化され、効率化されます。ユーザーに再試行を促したり、「構造が見つかりません」などのメッセージを表示したりするオプションを提供できます。また、考えられるすべての例外を明示的に処理する必要がないため、コードが煩雑にならず、その結果、コードの主な目的に集中できます。
回復可能な障害の処理方法の例:
let light1 = lightDevices.first
if let light = light1 {
do {
try await structure.move(device: light, to: room)
} catch let error as HomeError {
// Code for handling the exception
}
次の表に、発生する可能性のある HomeError
コードの意味を示します。
コード | 意味 |
---|---|
aborted |
オペレーションが中断されました。これは通常、シーケンス チェックの失敗やトランザクションの中止などの同時実行の問題が発生した場合に表示されます。 |
alreadyExists |
作成しようとしているリソースまたはエンティティはすでに存在します。たとえば、サーモスタットのスケジュールに名前を付けることができます。 |
cancelled |
オペレーションがキャンセルされました。通常、キャンセルは呼び出し元により行われます。 |
dataLoss |
回復不能なデータの消失や破損。 |
deadlineExceeded |
オペレーションが完了する前に期限が切れました。システムの状態を変更するオペレーションの場合、オペレーションが正常に終了しても、このエラーが返されることがあります。たとえば、サーバーからの正常なレスポンスが期限切れになるほど遅延する場合もあります。 |
failedPrecondition |
システムがオペレーションの実行に必要な状態ではないため、オペレーションが拒否されました。たとえば、すでに停止しているオーブンで stop を呼び出した場合、このメッセージが表示されることがあります。 |
internal |
内部エラー。これは、基盤となるシステムで予期される一部の不変条件が満たされていないことを意味します。このエラーコードは深刻なエラーのために予約されています。 |
invalidArgument |
クライアントが無効な引数を指定しました。これは `failedPrecondition` とは異なります。`invalidArgument` は、システムの状態を問わず問題(ファイル名の形式が不適切であるなど)があった引数を示します。 |
notFound |
見つからないエンティティまたはリソースを指定しました。たとえば、メディア プレーヤー デバイスで
play を呼び出すときに存在しないトラック ID を指定する場合などです。 |
outOfRange |
現在のシステム状態に基づいて、パラメータが有効な範囲を超えました。このメッセージは、API 呼び出しで受け入れられる可能性のある値の範囲内にあるものの、現在のコンテキストでは意味をなさない値が指定された場合に発生します。 |
permissionDenied |
指定されたオペレーションを実行する権限がありません。このエラーコードは、リクエストが有効であることを意味するものではありません。 |
resourceExhausted |
一部のリソースが枯渇しています。たとえば、ペット用フィーダー デバイスで
dispense(item:amount:unit:presetName:) を呼び出したときに、ユニットに餌が残っていない場合などにスローされます。 |
unauthenticated |
呼び出し元を特定できないか、リクエストに有効な認証情報がありません。 |
unavailable |
サービスを利用できません。これは、バックオフで再試行することで解決できる可能性が高い一時的な状態です。非べき等オペレーションの再試行が常に安全であるとは限りません。 |
unimplemented |
リクエストされたオペレーションは、このサービスで実装、サポート、有効化されていません。 |
unknown |
不明なエラーが発生しました。一般的に、unknown は、他のエラーコードで分類できないエラー条件が発生した場合に表示されます。たとえば、根本原因に関する十分な情報がない外部 API から受信したステータス値が原因で、このエラーが返されることがあります。 |