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:) を呼び出したときに、ユニットに餌が残っていない場合にスローされる可能性があります。
unauthenticated 呼び出し元を特定できないか、リクエストに有効な認証情報が含まれていません。
unavailable サービスを利用できません。これは、バックオフで再試行することで解決できる可能性が高い一時的な状態です。非べき等オペレーションの再試行が常に安全であるとは限りません。
unimplemented リクエストされたオペレーションは、このサービスで実装、サポート、有効にされていません。
unknown 不明なエラーが発生しました。一般に、unknown は、他のエラーコードを使用して分類できないエラー状態が発生したときに表示されます。たとえば、外部 API から受信したステータス値に根本原因に関する十分な情報がない場合に、このエラーが返されることがあります。