Error 타입
thrown 될 수 있는 에러값을 나타내는 타입
열거형을 이용한 예외 정의
enum(열거형)으로 오류 케이스들을 정의해줍니다.
단, 원치않는 경우 꼭 오류 정의를 하지 않아도 됩니다.
// 예외 케이스 정의. 필수는 아니다.
enum defineError: Error {
case outOfRange // 기본 enum 케이스
case nonEven(testInput : Int) // 파라미터를 받는 케이스
// case .... 여러개 가능
}
예외 정의별로 조건을 작성한 함수 정의
throw로 던져진 예외를 처리하는 곳은 throws가 정의된 함수가 호출된 부분입니다.
// 예외 케이스별로 예외 조건을 작성하여 예외 처리하고 싶은 함수 정의
func printEvenInt(number: Int) throws -> Int {
guard 100 >= number && number >= 0 else {
throw defineError.outOfRange
}
guard (number % 2) == 0 else {
throw defineError.nonEven(testInput: number)
}
return number
}
함수가 던진 예외 사항들을 받았을 때 어떻게 처리할지 작성
// 예외 케이스별로 예외 조건이 작성된 함수를 호출.
// 각각의 예외(error) 케이스별로 예외 처리의 구체적인 부분을 작성
do{
let resultNum = try printEvenInt(number: 12)
print("resultNum is \(resultNum)")
} catch {
switch error {
case defineError.outOfRange:
print("outOfRange. \(error)")
case defineError.nonEven(testInput: let number):
print("nonEven \(error)")
default:
print("default error message")
}
}
예외 처리 코드 전체
// 예외 케이스 정의. 필수는 아니다.
enum defineError: Error {
case outOfRange // 기본 enum 케이스
case nonEven(testInput : Int) // 파라미터를 받는 케이스
// case .... 여러개 가능
}
// 예외 케이스별로 예외 조건을 작성하여 예외 처리하고 싶은 함수 정의
func printEvenInt(number: Int) throws -> Int {
guard 100 >= number && number >= 0 else {
throw defineError.outOfRange
}
guard (number % 2) == 0 else {
throw defineError.nonEven(testInput: number)
}
return number
}
// 예외 케이스별로 예외 조건이 작성된 함수를 호출.
// 각각의 예외(error) 케이스별로 예외 처리의 구체적인 부분을 작성
do{
let resultNum = try printEvenInt(number: 12)
print("resultNum is \(resultNum)")
} catch {
switch error {
case defineError.outOfRange:
print("outOfRange. \(error)")
case defineError.nonEven(testInput: let number):
print("nonEven \(error)")
default:
print("default error message")
}
}
추가)
try try? try!
'Swift' 카테고리의 다른 글
Swift - 싱글톤 디자인 패턴(Singleton Design Pattern) (0) | 2020.04.06 |
---|---|
Swift - 스위프트 API 디자인 가이드라인 번역 링크! (0) | 2020.03.29 |
Swift - Constants(상수) 다루기 with Static 키워드(typeProperty, type Method) (0) | 2020.01.29 |
Swift - for loop (0) | 2020.01.14 |
Swift - Extension (0) | 2020.01.14 |