大器晩成

Result Type 본문

iOS/Swift 문법

Result Type

zerobugpark 2025. 3. 3. 23:03
  • 에러가 발생하는 경우, 에러를 따로 외부로 던지는 것이 아니라, 리턴 타입 자체를 Result 타입으로 구현해서 함수 실행의 성공과 실패의 정보를 담아서 반환합니다.
  • enum Result<Success, Failure> where Failure : Error, Success : ~Copyable
  • Reuslt 타입은 열거형으로 구성되어있으며, sucess(연관값)와 failure(연관값)로 구분됩니다.
enum PayslipError: Error {
    case tooMany
    case tooSmall
}

func getPayslip(money: Int)  -> Result<String, PayslipError> {
    
    if money >= 3_000_000 && money <= 4_000_000 {
        let msg = "이번달은 입에 일주일에 치킨을 2번 먹을 수 있어요"
        return Result.success(msg)
    } else if money < 3_000_000 {
        return Result.failure(.tooSmall)
        
    } else {
        return Result.failure(.tooMany)
    }
}


let reuslt = getPayslip(money: 2_000_000)

switch reuslt {
case .success(let sucess):
    print(sucess)
case .failure(let error):
    
    switch error {
    case .tooMany:
        print("이건 성과급인가요?")
    case .tooSmall:
        print("무언가 잘못된거죠??")
    }
    
}
  • 에러 처리보다 깔끔하게 코드를 구성할 수 있습니다.

get() 메서드

let reuslt = try? getPayslip(money: 3_000_000).get()
  • get 메서드를 사용하면, 성공일 때는 Result 타입이 아닌 성공 값을 반환합니다.

 

참고 문헌

https://developer.apple.com/documentation/swift/result

 

Result | Apple Developer Documentation

A value that represents either a success or a failure, including an associated value in each case.

developer.apple.com

 

 

728x90

'iOS > Swift 문법' 카테고리의 다른 글

&& 쓸까? , 쓸까? Swift가 알려준다!  (0) 2025.04.30
싱글톤 패턴 Class / Struct 차이  (0) 2025.03.19
제네릭(Generics)  (0) 2025.03.03
에러 처리 (Error Handling)  (0) 2025.03.03
캡처리스트  (0) 2025.03.03