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 API 프로젝트 할당량을 초과했기 때문일 수도 있습니다. 자세한 내용은 할당량 관리를 참고하세요.
unauthenticated 호출자를 식별할 수 없거나 요청에 유효한 사용자 인증 정보가 없습니다.
unavailable 서비스를 사용할 수 없습니다. 일시적인 상태일 가능성이 높으며, 잠시 시간을 두고 다시 시도하면 해결될 수 있습니다. 멱등성이 없는 작업을 재시도하는 것이 항상 안전한 것은 아닙니다.
unimplemented 이 서비스에 요청된 작업이 구현되어 있지 않거나 지원되지 않거나 사용 설정되어 있지 않습니다.
unknown 알 수 없는 오류입니다. 일반적으로 unknown은 오류 조건이 발생하여 다른 오류 코드를 사용하여 분류할 수 없을 때 표시됩니다. 예를 들어 근본 원인에 관한 정보가 충분하지 않은 외부 API에서 수신한 상태 값이 반환될 수 있습니다.