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에서 수신한 상태 값에 근본 원인에 관한 충분한 정보가 없는 경우 이 오류가 반환될 수 있습니다. |