[Swift] try-catch

ds-k.mo·2022년 4월 29일
0

Swift

목록 보기
18/22

에러 처리

프로그램 내에서 에러가 발생한 상황에 대해 대응하고 이를 복구하는 과정

Swift 에러 처리

  1. 발생(throwing)
  2. 감지(catching)
  3. 전파(propagating)
  4. 조작(manipulating)

4가지의 일급 클래스를 제공

코드 예시

enum PhoneError : Error {
case unknown
case batteryLow(batteryLevel: Int)
}

// 에러를 던져준다.
//throw PhoneError.batteryLow(batteryLevel: 20)
/*
 ▿ PhoneError
   ▿ batteryLow : 1 element
     - batteryLevel : 20
*/


func checkPhoneBatteryStatus(batteryLevel: Int) throws -> String {
    guard batteryLevel != -1 else {throw PhoneError.unknown}
    guard batteryLevel > 20 else { throw PhoneError.batteryLow(batteryLevel: 20)}
    return "배터리 상태가 정상입니다."
}

/*
 do {
 try 오류 발생 가능 코드
 } catch 오류 패턴 {
  처리 코드
 }
*/

do {
    try checkPhoneBatteryStatus(batteryLevel: 20)
} catch PhoneError.unknown{
    print("알수 없는 에러입니다.")
} catch PhoneError.batteryLow(let batteryLevel){
    print("배터리 전원 부족! 남은 배터리 : \(batteryLevel)")
} catch {
    print("그 외 오류 발생 : \(error)")
}

let status = try? checkPhoneBatteryStatus(batteryLevel: 30)
//print(status) // nil (in batteryLevel : -1)
print(status) // Optional("배터리 상태가 정상입니다.") (in batteryLevel : 30)

let status2 = try! checkPhoneBatteryStatus(batteryLevel: 30)
// 에러가 절대로 발생하지 못하는 상황
print(status2) // "배터리 상태가 정상입니다."

0개의 댓글