나는 신속한 2에서 새로운 오류 처리 문제를 이해하려고 시도합니다. 여기 내가 한 일이 있습니다.
enum SandwichError: ErrorType {
case NotMe
case DoItYourself
}
그런 다음 오류를 발생시키는 메소드를 선언했습니다 (예외 사람들이 아닙니다. 오류입니다). 그 방법은 다음과 같습니다.
func makeMeSandwich(names: [String: String]) throws -> String {
guard let sandwich = names["sandwich"] else {
throw SandwichError.NotMe
}
return sandwich
}
문제는 발신 측에서 발생합니다. 이 메소드를 호출하는 코드는 다음과 같습니다.
let kitchen = ["sandwich": "ready", "breakfeast": "not ready"]
do {
let sandwich = try makeMeSandwich(kitchen)
print("i eat it \(sandwich)")
} catch SandwichError.NotMe {
print("Not me error")
} catch SandwichError.DoItYourself {
print("do it error")
}
후 do
라인 컴파일러는 말한다 Errors thrown from here are not handled because the enclosing catch is not exhaustive
. 그러나 내 의견으로는 SandwichError
열거 형 에는 두 가지 사례 만 있기 때문에 철저 합니다.
스위프트는 정기적 인 스위치 설명을 위해 모든 경우를 처리 할 때 철저하다는 것을 이해할 수 있습니다.
do
는 최상위 수준의 블록이 전체가 아닌 것을 허용하는 것으로 보입니다. 던지지 않는 기능으로 작업을 래핑하면 오류가 발생합니다.