iOS でのエラー処理

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 コードの意味を示します。

表: HomeError コード
コード 意味
aborted 操作が中止されました。これは通常、シーケンス チェックの失敗やトランザクションの中止などの同時実行の問題がある場合に表示されます。
alreadyExists 作成しようとしているリソースまたはエンティティがすでに存在しています。 たとえば、サーモスタットの名前付きスケジュールなどです。
cancelled オペレーションがキャンセルされました。通常、キャンセルは呼び出し元により行われます。
dataLoss 回復不能なデータの消失や破損。
deadlineExceeded オペレーションが完了する前に期限が切れました。システムの状態を変更するオペレーションの場合、オペレーションが正常に終了しても、このエラーが返されることがあります。たとえば、サーバーからの正常なレスポンスが期限切れになるほど遅延する場合もあります。
failedPrecondition システムがオペレーションの実行に必要な状態ではないため、オペレーションが拒否されました。たとえば、すでに停止しているオーブンで stop を呼び出した場合、このメッセージが表示されることがあります。
internal 内部エラー。これは、基盤システムが想定しているいくつかの不変条件が破られたことを意味します。このエラーコードは、重大なエラー用に予約されています。
invalidArgument クライアントが無効な引数を指定しました。これは failedPrecondition とは異なります。invalidArgument は、システムの状態を問わず問題(ファイル名の形式が不適切であるなど)があった引数を示します。
notFound 見つからないエンティティまたはリソースを指定した。たとえば、メディア プレーヤー デバイスで play を呼び出すときに、存在しないトラック ID を指定した場合です。
outOfRange 現在のシステム状態に基づいて、パラメータが有効な範囲を超えました。このメッセージは、値が API 呼び出しで受け入れ可能な値の範囲内にあるものの、現在のコンテキストでは意味をなさない場合に発生します。
permissionDenied 指定されたオペレーションを実行する権限がありません。このエラーコードは、リクエストが有効であることを意味するものではありません。
resourceExhausted 一部のリソースが枯渇しています。たとえば、ペット給餌器デバイスで dispense(item:amount:unit:presetName:) を呼び出したときに、ユニットに餌が残っていない場合にスローされます。

Home APIs プロジェクトの割り当てを超過していることが原因である可能性もあります。詳細については、割り当て管理をご覧ください。
unauthenticated 呼び出し元を識別できないか、リクエストに有効な認証情報がありません。
unavailable サービスを利用できません。これは、バックオフで再試行することで解決できる可能性が高い一時的な状態です。非べき等オペレーションの再試行が常に安全であるとは限りません。
unimplemented リクエストされたオペレーションは、このサービスで実装、サポート、有効化されていません。
unknown 不明なエラーが発生しました。一般的に、unknown は、他のエラーコードを使用して分類できないエラー状態が発生した場合に表示されます。たとえば、根本原因に関する十分な情報がない外部 API から受信したステータス値が返される場合に、このエラーが返されることがあります。