[Swift] try-catch

6108 단어 swiftiOSiOS

에러 처리

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

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) // "배터리 상태가 정상입니다."

좋은 웹페이지 즐겨찾기