ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • swift - Error Handing #1 (Error Handing)
    swift 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 : 전달받은 에러를 다른 코드 블록으로 다시 전달

    댓글

Designed by Tistory.