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 기능이 있습니다.
참고
'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 |