점진적 과부하 개발 블로그

Swift 에러 처리 본문

Swift/문법

Swift 에러 처리

지용빡 2022. 2. 10. 22:35
반응형
Swift 에러 처리에 대해 알아보겠습니다.
try-catch
import Foundation

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

throw PhoneError.batteryLow(batteryLevel: 20)
오류를 처리하는 4가지 방법
  1. 함수에서 발생한 오류를 해당 함수에 호출한 코드에 전파하는 방법
  2. do-catch 구문을 이용해서 처리하는 방법
  3. 옵셔널값으로 오류를 처리
  4. 오류가 발생하지 않을거라는 확신
함수에서 발생한 오류를 해당 함수에 호출한 코드에 전파하는 방법
  • 함수 매개변수 생성자 매개변수 뒤에 throws라는 키워드를 써주면 됩니다.
enum PhoneError: Error {
    case unknown
case batteryLow(batteryLevel: Int)
}

throw PhoneError.batteryLow(batteryLevel: 20)


func checkPhoneBatteryStatus(battryLevel: Int) throws -> String { // 함수 내부에서 throwing된 에러를 함수가 호출된 곳으로 전파한다.
    guard battryLevel != -1 else { throw PhoneError.unknown }
    guard battryLevel > 20 else { throw PhoneError.batteryLow(batteryLevel: 20)}
    return "배터리 상태 정상"
} 
// 배터리가 -1이하일때는 unknown 에러가 호출되고 배터리가 20이하일때는 batteryLow에러가 호출된다.
do-catch
do {
  try /오류 발생 코드/
} catch /오류 패턴/ {
	처리 코드
}

예제 코드

  • checkPhoneBatteryStatus가 오류를 발생시켜도 catch문이 오류를 잡아 개발자가 오류 상황에 맞는 적절한 예외 처리를 해줄수 있다.
enum PhoneError: Error {
    case unknown
case batteryLow(batteryLevel: Int)
}

func checkPhoneBatteryStatus(battryLevel: Int) throws -> String { // 함수 내부에서 throwing된 에러를 함수가 호출된 곳으로 전파한다.
    guard battryLevel != -1 else { throw PhoneError.unknown }
    guard battryLevel > 20 else { throw PhoneError.batteryLow(batteryLevel: 20)}
    return "배터리 상태 정상"
}

do {
    try checkPhoneBatteryStatus(battryLevel: -1)
} catch PhoneError.unknown {
    print("알 수 없는 에러")
} catch PhoneError.batteryLow(let batteryLevel) {
    print("배터리 전원 부족 남은 배터리 : \(batteryLevel)%")
} catch {
    print("그 외 오류 발생 : \(error)")
    }
try? /  !
  • 오류를 옵셔널 값으로 변환하여 처리
  • try?  오류가 발생할 수 있는 상황에 사용
  • try!  오류가 없을거라는 확신일때 사용
let status = try? checkPhoneBatteryStatus(battryLevel: -1)
print(status)

let status1 = try! checkPhoneBatteryStatus(battryLevel: 30)
print(status1)

 

반응형

'Swift > 문법' 카테고리의 다른 글

Swift Dictionary  (0) 2022.04.21
Swift 옵셔널 체이닝(Optional Chaining)  (0) 2022.02.14
Swift 고차함수  (0) 2022.02.09
Swift Array(배열) 정리  (0) 2022.02.08
Swift 프로토콜(Protocol)  (0) 2022.01.08