본문 바로가기

iOS

[iOS] Result Enum

URLSession의 dataTask를 처리할 때 completion으로 @escaping closure를 자주 사용했습니다. 이때 파라미터로 그냥 값만 넘겨주게 되었는데 저는 제가 필요한 부분에만 completion을 넣었는데 알고보니 closure가 다 실행되기 때문에 guard나 if같은 분기가 발생할 경우 마다 completion을 다 넣어주어야 했습니다. 

 

이 때 주로 사용하는 Result Enum에 대해서 간단하게 집고 넘어갑시다. ㅎ

- Declaration만보면 enum타입이고. Success, Failure이라는 두개의 값을 각각 가지고 있습니다. 성공시 실패시 두다 데이터를 전달해서 체크를 하는 것 같습니다. 

- where를 보면 Failure이라는 Generic은 Error프로토콜을 따라야합니다.

- @frozen은 매번 스위프트가 업데이트 될시에 enum의 case를 더이상 만들지 않겠다는 뜻입니다. 번외로 @unknown default 구문도 있습니다. 이는 추후에 case가 생길 수 있다!!를 의미합니다. 

 

Success Value를 어떻게 가져오지!?

1. enum이기 때문에 switch 구문을 써서 가져오는 방법이 있고

2. func get() -> Success 함수를 사용하는 방법이 있습니다.

 

기타

func map<NewSuccess>((Success) → NewSuccess) → Result<NewSuccess, Failure>

func mapError<NewFailure>((Failure) → NewFailure) → Result<Success, NewFailure>

그리고 flatMap 기능이 있습니다. 

참고

 

 

Apple Developer Documentation

 

developer.apple.com

 

'iOS' 카테고리의 다른 글

[iOS] - KingFisher 리드미 읽기~  (0) 2021.10.10
[iOS] - UserDefaults  (0) 2021.10.03
[iOS] - UITableView  (0) 2021.09.26
[iOS] UIView 도큐먼트읽기  (0) 2021.07.16
[iOS] UIScrollViewDelegate  (0) 2021.06.30