- 1. DyTryCatch프로젝트를 싱글뷰로 생성한다. 언어는 스위프트
- 2. Date.swift파일을 추가한다.
- 3. 아래와 같이 코딩한다.
//
// Date.swift
// DoTryCatch
//
// Created by papasmf1 on 2015. 11. 6..
// Copyright © 2015년 com.mulcam70. All rights reserved.
//
import Foundation
//에러 타입에서 사용되는 열거형을 정의할 때는 반드시 ErrorType이라는
//프로토콜을 구현해야 한다(내부에 아무런 멤버도 선언되어 있지 않다. 이름만 약속!)
enum DateParseError : ErrorType {
case OverSizeString
case UnderSizeString
case IncorrectFormat(part:String)
case IncorrectData(part:String)
}
struct Date {
var year : Int
var month : Int
var date : Int
}
func parseDate(param:NSString) throws -> Date {
//입력된 문자열의 길이가 10이 아닐 경우 분석이 불가능하므로 오류
guard param.length == 10 else {
if param.length > 10 {
throw DateParseError.OverSizeString
} else {
throw DateParseError.UnderSizeString
}
}
//반환할 객체 타입 선언
var dateResult = Date(year: 0, month: 0, date: 0)
//연도 정보 분석
if let year = Int(param.substringWithRange(NSRange(location: 0, length: 4)))
{
dateResult.year = year
} else {
//연도 분석 오류
throw DateParseError.IncorrectFormat(part: "year")
}
//월 정보 분석
if let month = Int(param.substringWithRange(NSRange(location: 5, length: 2))) {
//월에 대한 값은 1 ~ 12까지만 가능하므로 그 외의 범위는 잘못된 값으로 처리
guard month > 0 && month < 13 else {
throw DateParseError.IncorrectData(part: "month")
}
dateResult.month = month
} else {
//월 분석 오류
}
if let date = Int(param.substringWithRange(NSRange(location: 8, length: 2))) {
//일에 대한 값은 1 ~ 31까지만 가능하므로 그 외의 범위는 잘못된 값으로 처리
guard date>0 && date<32 else {
throw DateParseError.IncorrectData(part: "date")
}
dateResult.date = date
} else {
//일 분석 오류
throw DateParseError.IncorrectFormat(part: "date")
}
return dateResult
}
- 4. ViewController.swift파일에 아래와 같이 코드를 추가한다.
//
// ViewController.swift
// DoTryCatch
//
// Created by papasmf1 on 2015. 11. 6..
// Copyright © 2015년 com.mulcam70. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
func getPartsDate(param: String, type: String) {
do {
//호출할 이름 앞에 try키워드를 붙여야 한다.
//try키워드 없이 함수를 호출하면 컴파일러에 의한 오류가 발생한다.
let date = try parseDate(param)
switch type {
case "year":
print("\(date.year)년 입니다")
case "month":
print("\(date.month)월 입니다")
case "date":
print("\(date.date)일 입니다")
default:
print("입력값에 해당하는 날짜정보가 없습니다.")
}
} catch DateParseError.OverSizeString {
print("입력된 문자열이 너무 깁니다. 줄여주세요")
} catch DateParseError.UnderSizeString {
print("입력된 문자열이 불충분합니다. 줄여주세요")
} catch DateParseError.IncorrectFormat(let part) {
print("입력값의\(part)에 해당하는 형식이 잘못되었습니다.")
} catch DateParseError.IncorrectData(let part) {
print("입력값의\(part)에 해당하는 형식이 잘못되었습니다.")
} catch {
print("알 수 없는 오류가 발생했습니다.")
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
getPartsDate("2015-12-31", type: "year")
//(출력)
//2015년 입니다
getPartsDate("2015-12-31", type: "month")
//12월 입니다
getPartsDate("2015-13-31", type: "month")
//입력값의month에 해당하는 형식이 잘못되었습니다.
getPartsDate("2015-12-40", type: "date")
//입력값의date에 해당하는 형식이 잘못되었습니다.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
댓글 없음:
댓글 쓰기
참고: 블로그의 회원만 댓글을 작성할 수 있습니다.