Notice
Recent Posts
Recent Comments
Link
大器晩成
Result Type 본문
- 에러가 발생하는 경우, 에러를 따로 외부로 던지는 것이 아니라, 리턴 타입 자체를 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 |