공부한 것 꼭꼭 씹어먹기

try-catch 본문

Swift 기초

try-catch

젤라솜 2021. 10. 31. 20:54
반응형

스위프트에서 오류를 처리하는 방법

  1. 함수에서 발생한 오류를 해당 함수를 호출한 코드에 전파하는 방법 : throws
  2. do-catch 구문을 이용하는 방법
  3. 옵셔널 값으로 오류를 처리하는 방법 : try?
  4. 오류가 발생하지 않을 것이라고 확신하는 방법 : 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)  // "배터리 상태가 정상입니다" 출력. 만약 에러 던지면 런타임에러남

 

반응형

'Swift 기초' 카테고리의 다른 글

고차 함수  (0) 2021.11.01
closure  (0) 2021.11.01
옵셔널 체이닝  (0) 2021.10.30
extension  (0) 2021.10.30
protocol  (0) 2021.10.29
Comments