WooKoo Blog

물과 같이

개발/개발

[Swift] - 오류 처리

WooKoo 2019. 7. 31. 14:51

서론

오류를 꼼꼼하게 처리하여 안정성을 높이는데에 필요한 방법이다.

스위프트는 크게 두가지의 방법이 있는데 옵셔널과 이번 포스트이다.

 

오류 처리 구문

오류를 처리하기 위해서는 오류 정보를 담아 함수나 메소드 외부로 던질 오류 타입 객체가 필요하다.

보통 열거형으로 타입을 정의하는 경우가 많다.

 

중요!!

protocol Error{

}

위와 같이  오류 타입으로 사용되는 열거형 객체를 정의 할 때는 반드시 Error라는 프로토콜로 구현해야한다.

 

예시

[YYYY-MM-DD] 이라는 문자열을 분석하여 연도, 월, 일 형식의 데이터로 변경하려고 한다.

 

발생할 수 있는 오류

1. 입력된 문자열의 길이가 필요한 크기와 맞지 않는 오류

2. 입력된 문자열의 형식이 YYYY-MM-DD 형태가 아닌 오류

3. 입력된 문자열의 값이 날짜와 맞지 않는 오류

 

enum DateParseError: Error{
	case overSizeString
    case underSizeString
    case incorrectFormat(part: String)
    case incorretData(part: String)
}

 

오류 던지기

함수나 메소드를 작성할 때 throws를 정의 구문에 작성

func test() throws -> String

 

예시 전체 소스

import Foundation
struct Date{
	var year: Int
    var month: Int
    var date: Int
}

func parseDate(param: NSString) throws ->Date{
	//입력된 문자열의 길이가 10이 아닐 경우 분석이 불가능하므로 오류
    guard param.length == 10 else{
    	if parma.length > 10
        	throw DateParseError.overSizeString
        } else {
        	throw DateParseError.underSizeString
        }
    }
//반환 할 객체 타입 선언
var date Result = Date(year: 0, month: 0, date: 0)

// 연도 정보 분석
if let year = Int(param.substring(with: NSRange(location: 0, length: 4))) {
	dateResult.year = year
} else {
	//연도 분석 오류
    throw DateParseError.incorrectFormat(part: "year")
}

// 월 정보 분석
if let month = Int(param.substring(with: NSRange(location: 5, length: 2))) {
	//월에 대한 값은 1 ~ 12까지만
    guard month > 0 && month < 13 else{
    	throw DateParseError.incorrectData(part: "month")
    }
    dateResult.month = month
} else {
	//월 분석 오류
    throw DateParseError.incorrectFormat(part: "month")
}

// 일 정보 분석
if let date = Int(param.substring(with: NSRange(location: 8, length: 2))) {
	//일에 대한 값은 1 ~ 31까지만
    guard month > 0 && month < 32 else{
    	throw DateParseError.incorrectData(part: "date")
    }
    dateResult.date = date
} else {
	//일 분석 오류
    throw DateParseError.incorrectFormat(part: "datte")
    }

return dateResult
}