[Swift] Result Type 알아보기. (Enum Result)

  [Swift] Result Type 알아보기. (Enum Result<Succes, Failure>)


안녕하세요. 물먹고하자 입니다 :)

오늘은 Result 라는 Apple 기본 Enum type을 알아보려고합니다.

사실 딱히 사용하고 있지 않았었는데, 

swift async await 적용준비하다가 응답이 두개인 closure 일때 (?)가 뜨더군요

그래서 알아봤는데, 생각보다 편하게 되어있어서 사용해보고, 내용공유드립니다.


  사전조사

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

iOS 8.0 이상부터 사용가능하고,
Enum Type 으로 case로 success, failure 를 제공한다.

샘플코드도 제공해주네요. (생각보다 잘 정리되어있음.)

Result<Success, Failure>를 사용은 안했지만, 어디서 많이 봤다고 생각한게 Alamofire Response 받을때 사용하고 있었다. (하하하... ^^ 확실히 라이브러리들 사용하고 있는 패턴 보면 도움이 많이된다.)

Alamofire Sample
https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-handler

  샘플코드

위의 참고할만한 정보들은 찾았고, 기존에 있는 것과 비교하면서 샘플코드를 작성해 보겠습니다.

샘플 코드에서는 결과는 동일하게 맞춤

선언부

예시로 잡은부분은 Success, Fail 구조로 closure 방식Result<Success, Failure> 방식 준비했습니다.


1. closure 사용방식

가장 많이 흔하게 보는 구조이며, 성공과 실패의 블럭이 나눠져 있어서 별도로 처리가능한 구조입니다.


2. Result Type 사용방식1

closure 방식을 사용하진 않았지만, 성공과 실패가 묶여 switch case 문을 통해 처리가 가능한 구조입니다.


3. Result Type 사용방식2

try catch 구조로 .get() 통해 성공의 결과만 받고, 실패시에는 catch 에서 처리하는 구조입니다.


  마무리

전체소스코드 : https://gist.github.com/kimjiwook/60e9c87a9d4c04e963e009fba1f74326

결과 Response 받는방식을 여러개의 closure나, Result Type 이나 알고 있으면, 활용도에 맞게 사용하기 좋을것 같습니다. 

이번에 Result Type 공부하면서 몇가지 반성하게 되는게, Objc -> Swift 언어로 전환할때부터 알고 있었으면,

네트워크 결과 프로세스를 Result Type으로 사용하지 않았을까? 생각이 드네요 (심지어 iOS 8.0 이상인데..)

솔직히 Result Type을 모른다고 문제가 되진 않았는데, async, await 공부시 결과 전달시 멍~ 해지더군요 ㅋ


아무튼 async, await 들어가기전에 알고있으면, 도움되는 부분을 공부겸 공유드립니다.


오늘은 이만 즐거운 코딩되세요 :)


끝.

댓글