-
Swift 오류처리 -3Programming/Swift(iOS) 2021. 4. 6. 13:10728x90
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