The Basics - Error Handling Swift


에러 핸들링

실행중에 만날수있는 에러 조건에 대응하기 위해 에러핸들링을 사용한다.

함수의 성공또는 실패와 커뮤니케이트하는 값이 존재하는지 존재하지 않는지로 사용될 수 있는 옵셔널과 달리 에러 핸들링은 실패 하부의 원인을 알수있게 하고 필요하다면 프로그램의 다룬 부분에 에러를 파생시킨다.

함수가 에러 조건에 만나면 에러를 던진다. 함수의 호출자는 에러를 잡아 적절히 대응한다.

func canThrowAnError() throws {
}

함수가 에러를 던질 수 있는지 여부는 throws 키워드를 포함함으로서 지정된다. 에러를 던질 수 있는 함수를 호출할 때 표현을 위해 try 키워드를 사용한다.

스위프트는 자동적으로 현 범위의 바깥에 에러를 파생하며 catch 에 의해 다뤄질 때까지 지속된다.

do {
  try canThrowAnError()
  // no error was thrown
} catch {
  // an error was thrown
}

A do statement creates a new containing scope, which allows errors to be propagated to one or more catch clauses.

어떻게 에러 핸들링이 다른 에러 조건에 반응되는지 보여준다.

func makeASandwich() throws {
    // ...
}

do {
    try makeASandwich()
    eatASandwich()
} catch SandwichError.outOfCleanDishes {
    washDishes()
} catch SandwichError.missingIngredients(let ingredients) {
    buyGroceries(ingredients)
}

이 예시에서, makeASandwich() 함수는 클린 디쉬가 없거나 재료가 없으면 에러를 던진다. makeASandwich() 가 에러를 던질 수 있으므로 함수는 try 표현에 감싸진다. do 문장에서 함수를 호출하도록 감쌈으로서 던져지는 모든 에러는 제공된 catch 문젱에 파생된다.

If no error is thrown, the eatASandwich() function is called. If an error is thrown and it matches the SandwichError.outOfCleanDishes case, then the washDishes() function will be called. If an error is thrown and it matches the SandwichError.missingIngredients case, then the buyGroceries(_:) function is called with the associated [String] value captured by the catch pattern.

Throwing, catching, and propagating errors is covered in greater detail in Error Handling.


덧글

댓글 입력 영역