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 から受信したステータス値の場合に、このエラーが返されることがあります。