반응형
Notice
Recent Posts
Recent Comments
Link
공부한 것 꼭꼭 씹어먹기
try-catch 본문
반응형
스위프트에서 오류를 처리하는 방법
- 함수에서 발생한 오류를 해당 함수를 호출한 코드에 전파하는 방법 : throws
- do-catch 구문을 이용하는 방법
- 옵셔널 값으로 오류를 처리하는 방법 : try?
- 오류가 발생하지 않을 것이라고 확신하는 방법 : try!
// 에러를 열거형으로 정의
enum PhoneError: Error {
case unknown
case batteryLow(batteryLevel: Int)
}
// 에러가 발생할 것 같은 지점에 아래 에러를 던저주자
throw PhoneError.batteryLow(batteryLevel: 20)
// 1. 함수에서 발생한 오류를 해당 함수를 호출한 코드에 전파하는 방법
func checkPhoneBatteryStatus(batteryLavel: Int) throws -> String {
guard batteryLevel != -1 else { throw PhoneError.unknown }
guard batteryLevel > 20 else { throw PhoneError.batteryLow(batteryLevel:20)}
return "배터리 상태가 정상입니다."
}
// 2. do-catch
do {
try checkPhoneBatteryStatus(batteryLevel: -1)
}catch PhoneError.unknown {
print("알 수 없는 에러입니다.")
}catch PhoneError.batteryLow(let batteryLevel) {
print("배터리 전원 부족. 남은 배터리 : \(batterylevel)%")
}catch {
print("그 외 오류 발생 : \(error)")
}
// 3. 옵셔널 값으로 오류를 처리 : try? 이하 구문이 에러를 뱉으면 그 구문의 반환값은 nil이 된다
let status = try? checkPhoneBatteryStatus(batteryLevel: -1)
print(status) // nil 출력
let status = try? checkPhoneBatteryStatus(batteryLevel: 30)
print(status) // Optional("배터리 상태가 정상입니다") 출력. 에러가 아니면 옵셔널로 감싸서 반환
// 4. 오류가 발생하지 않을 것이라고 확신하는 방법
let status = try! checkPhoneBatteryStatus(batteryLevel: 30)
print(status) // "배터리 상태가 정상입니다" 출력. 만약 에러 던지면 런타임에러남
반응형
Comments