본문 바로가기

Swift

Swift - Exception Handling(예외처리)

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!