투케이2K

95. (swift/xcode) do catch try 사용해 에러 발생 상황 확인 및 throw 예외 던지기 수행 실시 본문

Swift

95. (swift/xcode) do catch try 사용해 에러 발생 상황 확인 및 throw 예외 던지기 수행 실시

투케이2K 2022. 8. 16. 13:10

[개발 환경 설정]

개발 툴 : XCODE

개발 언어 : SWIFT

 

[소스 코드]

import UIKit


// MARK: [클래스 동작 실시]
class ViewController: UIViewController {

    
    // MARK: [뷰 메모리 로드 수행 실시]
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        print("")
        print("===============================")
        print("[ViewController >> viewDidLoad() :: 뷰 메모리 로드 실시]")
        print("===============================")
        print("")
        
        
        /*
         [요약 설명]
         1. guard let : 조건이 true 인 여부를 검사합니다
         2. guard let 구문에서 조건이 true 인 경우 guard let 구문을 수행하고 , false 인 경우 else 구문에서 예외 처리를 수행합니다
         3. do ~ catch : swift 에서 에러 발생 시 예외 처리를 수행합니다
         4. throw : 예외 상황 발생 시 예외 발생 알림 (던지기) 를 수행합니다
         5. try : 예외 발생 시 catch 로 예외 정보를 던지며 >> 성공 시 언래핑 된 값을 반환합니다
         6. try? : 예외 발생 시 nil 값을 리턴 >> 성공 시 옵셔널 값을 반환합니다
         7. try! : 예외 발생 시 런타임 에러 >> 성공 시 언래핑 된 값을 반환합니다
         */
        
        
        // [변수 선언 실시]
        var stringValue: String?
        
        
        // [do catch 에러 구문 처리 실시]
        do {
            // [테스트 함수 호출 실시]
            let parseData = try self.testMain(strData: stringValue ?? "")
            
            print("")
            print("===============================")
            print("[ViewController >> viewDidLoad() :: do catch 정상 수행]")
            print("[parseData :: \(parseData)]")
            print("===============================")
            print("")
        }
        catch let error as ErrorUtil {
            print("")
            print("===============================")
            print("[ViewController >> viewDidLoad() :: catch [1] 에러 발생]")
            print("[error :: \(error)]")
            print("[localizedDescription :: \(error.localizedDescription)]")
            print("===============================")
            print("")
        }
        catch {
            print("")
            print("===============================")
            print("[ViewController >> viewDidLoad() :: catch [2] 에러 발생]")
            print("[error :: \(error)]")
            print("[localizedDescription :: \(error.localizedDescription)]")
            print("===============================")
            print("")
        }
        
    }
    
    
    
    
    
    // MARK: - [뷰 화면 표시]
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        print("")
        print("===============================")
        print("[ViewController >> viewDidAppear() :: 뷰 화면 표시]")
        print("===============================")
        print("")
    }
    
    
    
    
    
    // MARK: - [뷰 종료 상태]
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        print("")
        print("===============================")
        print("[ViewController >> viewDidDisappear() :: 뷰 종료 상태]")
        print("===============================")
        print("")
    }
    
    
    
    
    
    // MARK: [enum 사용해 에러 타입 정의 실시 : 선택 사항]
    enum ErrorUtil : Error {
        
        // [string 타입 에러 정의]
        case stringTypeError(string : String)
        
        // [string Null 에러 정의]
        case stringNullError(string : String)
    }

    
    
    
    
    
    // MARK: - [테스트 함수 정의]
    func testMain(strData: String) throws -> String {
        print("")
        print("===============================")
        print("[ViewController >> testMain() :: 테스트 함수 수행]")
        print("[strData :: \(strData)]")
        print("===============================")
        print("")
        
        // [리턴 변수 선언 실시]
        var returnData = ""
        
        
        // [guard let 을 사용해 String 타입 여부 검사 실시]
        guard let checkType = strData as? String
        else {
            // [false 인 경우 else 구문에서 예외 처리를 수행]
            throw ErrorUtil.stringTypeError(string: strData)
        }
        
        
        // [String 널 체크 수행 실시]
        if strData != nil && strData.count > 0 && strData != "" {
        }
        else {
            // [false 인 경우 else 구문에서 예외 처리를 수행]
            throw ErrorUtil.stringNullError(string: strData)
        }
        
        
        // [리턴 수행]
        return returnData
    }


} // [클래스 종료]
 

[결과 출력]

 

 

반응형
Comments