swift
swift - Error Handing #1 (Error Handing)
행복하게사는게꿈
2021. 1. 13. 10:34
Error Handing
에러가 발생하면 프로그램이 강제 종료되지만 에러를 직접 Handing하면 프로그램 종료 없이 처리 할 수 있다.
에러는 크게 Comile Time Error와 Runtime Error로 구분한다.
Compile error는 보통 문법과 관련이 있다.
runtime error는 프로그램이 실행중일때 발생, 문법적인 에러가 아니더라도 디바이스의 상태나 리소스 때문일 수도 있다.
// err 프로토콜을 채용하면 err 형식이 되는데 보통 enum으로 선언한다.
enum DataParsingError : Error {
case invalidType
case InvalidField
case missingRequiredField(String)
}
// 일반 형식과 에러 형식의 차이점은 하나이다.
// 에러 형식은 swift 에러 처리 시스템에 통합된다.
// 이제 데이터 파싱에서 에러가 발생하면 새로운 에러 인스턴스를 생성하고 에러를 처리하는 코드로 전달 할 수 있다.
// 에러는 전달받는 코드에서는 발생한 에러종류를 확인하고 에러를 처리한다.
// 에러를 전달하는 것을 에러를 던진다는 것으로 표현한다. -> throw 키워드
// throw 뒤에는 err형식의 인스턴스가 위치한다.
// throw문은 아무데서나 호출할 수 없고 코드 블록이 에러를 던질 수 있다고 선언되어 있어야 한다.
// throwing func
func parsing(data: [String: Any]) throws {
guard let _ = data["name"] else {
throw DataParsingError.missingRequiredField("name")
}
guard let _ = data["age"] as? Int else {
throw DataParsingError.invalidType
}
}
// throw func을 호출할때는 try 문을 사용한다.
// try : do문과 같이 쓴다
// try? : err가 발생할 경우 nil
// try! : err가 발생할경우 runtime err
try? parsing(data: [:])
// 에러를 처리하는 방법
// 1. do-catch statement
// 2. try Expression + Optional Binding
// 3. hand over : 전달받은 에러를 다른 코드 블록으로 다시 전달