Swift: Throw, Try, Do-Catch
함수에서 발생할 수 있는 에러를 식별, 처리하는 과정을 관리함수 내에서 특정 조건에 따라 에러를 발생시키기 위해 사용한다.발생될 에러의 종류를 enum과 Error 프로토콜을 활용하여 먼저 정의한다.함수가 에러를 던질 수 있다는 것을 throws를 통해 명시한다.함수
Read original on Velog ↗Original article in Korean
Throw, Try, Do-Catch
- 함수에서 발생할 수 있는 에러를 식별, 처리하는 과정을 관리
Throw
- 함수 내에서 특정 조건에 따라 에러를 발생시키기 위해 사용한다.
- 발생될 에러의 종류를
enum과Error프로토콜을 활용하여 먼저 정의한다.
enum MyError: Error {
case firstError
case secondError
}
- 함수가 에러를 던질 수 있다는 것을
throws를 통해 명시한다. - 함수 내부에서 특정 조건에서
throw를 통해 에러를 던질 수 있다.
func someFunction() throws -> String {
// 에러 조건
if isSuccess {
return "Success!"
} else {
// 에러 던지기
throw MyError.firstError
}
}
throw를 통해 에러를 던지는 함수는 반드시try를 통해 호출해야 한다.
Try, Do-Catch
throws함수는 반드시try를 통해 호출하고throw로 던지는 에러에 대한 처리를 해야한다.- 에러에 대한 처리는
do-catch문을 통해catch블럭에서 해야한다.
// try 키워드를 통해 에러를 던질 수 있는 함수 호출
do {
let result = try someFunction()
} catch MyError.firstError {
// 특정 에러 처리
} catch {
// 다른 에러 처리
}
- 에러의 종류에 따라
switch문을 통해 케이스별로 처리할 수 있다.
do {
let result = try someFunction()
} catch {
// 케이스별 오류 처리
switch error {
case MyError.firstError:
print("first")
case MyError.secondError:
print("second")
default:
print("default")
}
}
try?는 에러를 던지는 함수의 결과를 옵셔널로 감싸, 에러를 발생할 경우nil로 반환한다.- 때문에
do-catch문 없이도 사용할 수 있다.
// 에러가 발생할 경우 nil로 처리
let result = try? someFunction()
try!는 함수가 에러를 던지지 않을 것이라는 확신이 있을 때 사용하며, 만약 함수가 에러를 던지면 런타임 에러가 발생하고 프로그램이 종료되기 때문에 주의해야 한다.
// 에러가 발생할 경우 프로그램 종료
let result = try! someFunction()