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에서 수신한 상태 값이 이 오류를 반환할 수 있습니다. |