티스토리 뷰

< Essentials - Adding Side Effects >

 

< Section 2  - 네트워크 요청 실행하기 >

< Ref - https://pointfreeco.github.io/swift-composable-architecture/main/tutorials/composablearchitecture/01-02-addingsideeffects >

 

 

* 개요

 - Side effect란 무엇이고 왜 Reducer에서 바로 실행될 수 없는지에 대해 이해했습니다. 앞서 작성한 코드는 아직 불완전한 상황인데, 이를 고치는 방법에 대해 알아보도록 하죠.

 - TCA는 Reducer의 정의에 "effect"라는 개념을 가지고 있어요. Reducer가 State를 변화시킴으로서 Action을 처리한 후에 Reducer는 'Effect'라 불리는 것을 리턴할 수 있고, 이 Effect라는 친구는 Store에 의해 작동하는 비동기 단위(asynchronous unit)를 말합니다.

 - Effect는 외부 시스템과 커뮤니케이션 할 수 있는 것 그리고 외부 시스템으로 부터 Reducer로 데이터를 피드백 받는 것을 일컫습니다.

 - 이것이 바로 숫자에 대한 fact effect로 우리가 구현하고자 하는 것이죠. 네트워크 요청을 하고 Reducer로 정보를 피드백 받는 것 말이죠. 바로 시작해볼까요?

 

 

* Step 1

 - Effect를 생성하는 원시적인 방식 중 하나는 run(priority:operation:catch:fileID:line:) static method에요.

 - 위 메서드는 여러분에게 비동기 컨텍스트(Asynchronous context)를 제공하는데, 그래서 우리가 원하는 어떤 종류의 작업이라도 수행할 수 있어요.

* Step 2

 - trailing closure인 '.run'은 데이터를 가져오기 위한 네트워크 요청을 실행하기에 완벽한 요소입니다. 데이터를 가져와서 String으로 바꿔보죠.

 - TIP

   * 튜토리얼에서 사용하는 API의 URL인 numbersapi.com은 HTTPS 통신을 지원하지 않기 때문에, info.plist 파일에서 HTTP 통신을 할 수 있도록 추가해주세요.

   * Ref) https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity

 

NSAppTransportSecurity | Apple Developer Documentation

A description of changes made to the default security for HTTP connections.

developer.apple.com

 

 

* Step 3

 - 하지만, 네트워크를 통해 데이터를 가져온 후, state.fact를 변경하는 것은 불가능해요.

 - Complier에 의해 엄격하게 지켜지기 때문인데, Closure에서 inout state를 캡쳐할 수 없기 때문이죠. 

 - 하지만 TCA에서 이걸 쓸 수 있도록 하는 나이스한 방법을 제공해요.

* Step 4

 - 자, 이 방법을 알아보기 위해서 먼저 factResponse라는 연관 값으로 문자열을 가지고 있는 Action을 enum에 추가할게요. 이 연관 값은 네트워크를 통해 가져옵니다. 

 - 그리고 나서 effect로 action을 보낼거에요. 비동기 작업이 실행된 후에 / 그리고 isLoading false로 바꿔준 후 새로운 action을 핸들링 하고 fact state를 업데이트 할게요. (Fix needed)

 - 주의)

  * 현재 우리가 간과하고 있는 것이 있어요. URLSession에 의해 던져질 수 있는 요소... 바로 에러들입니다! 

  * Tast Result 를 사용해서 에러 처리에 대한 이점을 누릴 수 있어요.

   # Ref) https://pointfreeco.github.io/swift-composable-architecture/main/documentation/composablearchitecture/taskresult/

 

Documentation

 

pointfreeco.github.io

 

 

* Step 5

 - 앱을 작동시켜서 기능이 예상대로 작동하는지 확인해보세요. 숫자를 변경하고 Fact버튼을 탭해보세요. 잠시 후에 변경된 숫자에 대한 fact가 UI 하단에 나타날거에요. 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함