ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift 오류처리 -3
    Programming/Swift(iOS) 2021. 4. 6. 13:10
    728x90

    Error처리를 한 군데에서 하면 중복된 코드를 방지할 수 있어 가독성을 높일 수 있습니다.

     

    Singleton

    - 'default' 

    => swift에 default keyword가 지정되어 있어 quota로 다르다는것을 표시 

    - shared : private로 제한을 걸어 생성을 불가능하게 한다. 

    struct ErrorHandler {
        static let `default` = ErrorHandler()
    
        func handle(_ error:Error) {
            print(error)
        }
    }

     

    타입을 생성할 때, Data의 유효성을 미리 검증해 볼 수 있다면 이후의 오류 처리를 줄일 수 있습니다. 

     

    에러 원인이 2개 이상일 경우 오류 처리를 하는 것이 좋고, 단일이라면 Optional 처리를 하는것이 편리합니다. 

     

    1. 에러 처리 (do ~ catch)

    //Error 원인이 2개 이상 
    enum UserError : Error {
        case emptyValueNotAllowed
        case invalidEmail
    }
    
    struct User {
        let email : String
        
        init(email:String) throws {
            if email.isEmpty {
                throw UserError.emptyValueNotAllowed
            }
            
            let pattern = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
            
            // 정규 표현식으로 email 검사
            if email.range(of:pattern, options: .regularExpression, range:nil, locale:nil) == nil  {
                throw UserError.emptyValueNotAllowed
            }
            self.email = email
        }
    
    do {
        let user = try User(email: ".com")
    } catch {
        print(error)
    }
    

    2. 실패 가능한 초기화 이용

    struct User {
        let email : String
    
        //실패 가능한 초기화
        init?(email:String) {
            let pattern = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
            
            // 정규 표현식으로 email 검사
            if email.range(of:pattern, options: .regularExpression, range:nil, locale:nil) == nil  {
                return nil
            }
            self.email = email
        }
    }
    
    if let user = User(email:"hello@") {
       print(user)
    } else {
        print("생성실패")
    }
    

     

     

    3. try

    - try : 오류를 외부로 전달 (do ~ catch)

    - try! : 오류 발생시 프로그램 종료

    - try? : 오류를 던질지 말지 선택하면 됨 (optional 처럼 사용)

    if let user = try? User(email:"hello@") {
        print(user)
    } else {
        print("생성 실패")
    }
    

    'Programming > Swift(iOS)' 카테고리의 다른 글

    Swift Generic - 2  (0) 2021.04.06
    Swift Generic - 1  (0) 2021.04.06
    Swift 오류처리 - 3  (0) 2021.04.06
    Swift 오류 처리 - 2  (0) 2021.04.06
    Swift 오류 처리 - 1  (0) 2021.04.06
Designed by Tistory.