728x90
출처 : Swift 에러 (Error) 처리, 예외 상황 다루기 (try, throws, defer 등) : 네이버 ...
enum ParseError : Error { case OverSize case UnderSize case InvalidFormat(value : String) case InvalidData(value : String) }
예외발생
func parseTime(timeString : NSString) throws -> Time { var retTime = Time(hour : 0, min : 0, sec : 0) guard timeString.length == 8 else { if timeString.length > 8 { throw ParseError.OverSize } else { throw ParseError.UnderSize } } if let hour = Int(timeString.substring(to: 2)) { print(hour) guard hour >= 0 && hour < 24 else { throw ParseError.InvalidFormat(value: "시간") } retTime.hour = hour } else { throw ParseError.InvalidFormat(value: "시간") } if let min = Int(timeString.substring(with : NSRange(location : 3, length : 2))) { print(min) guard min >= 0 && min < 60 else { throw ParseError.InvalidFormat(value: "분") } retTime.min = min } else { throw ParseError.InvalidFormat(value: "분") } if let sec = Int(timeString.substring(from : 6)) { print(sec) guard sec >= 0 && sec < 60 else { throw ParseError.InvalidFormat(value: "초") } retTime.sec = sec } else { throw ParseError.InvalidFormat(value: "초") } return retTime }
예외처리
func getPartTime(timeString : NSString, type : String) { do { let time = try parseTime(timeString : timeString) switch type { case "hour": print("\(time.hour)시") case "min": print("\(time.min)분") case "sec": print("\(time.sec)초") default: print("입력값 배당 시간 정보 없음") } } catch ParseError.OverSize { print("입력 문자열이 깁니다.") } catch ParseError.UnderSize { print("입력 문자열이 짧습니다.") } catch ParseError.InvalidData(let part) { print("입력값의 \(part)에 해당하는 형식 오류") } catch ParseError.InvalidFormat(let part) { print("입력값의 \(part)에 해당하는 값 오류") } catch { print("알 수 없는 오류") } }
728x90