티스토리 뷰
< Essentials - Adding Side Effects >
< Section 2 - 네트워크 요청 실행하기 >
* 개요
- 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 통신을 할 수 있도록 추가해주세요.
* 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 를 사용해서 에러 처리에 대한 이점을 누릴 수 있어요.
* Step 5
- 앱을 작동시켜서 기능이 예상대로 작동하는지 확인해보세요. 숫자를 변경하고 Fact버튼을 탭해보세요. 잠시 후에 변경된 숫자에 대한 fact가 UI 하단에 나타날거에요.
'Programming > SwiftUI' 카테고리의 다른 글
SwiftUI - TCA Tutorial 한글번역 (2023 ver) (6) (0) | 2023.10.25 |
---|---|
SwiftUI - TCA Tutorial 한글번역 (2023 ver) (4) (1) | 2023.10.21 |
SwiftUI - TCA Tutorial 한글번역 (2023 ver) (3) (1) | 2023.10.19 |
SwiftUI - TCA Tutorial 한글번역 (2023 ver) (2) (1) | 2023.10.18 |
SwiftUI - TCA Tutorial 한글번역 (2023 ver) (1) (2) | 2023.10.17 |
- Total
- Today
- Yesterday
- inswag
- lifecycle
- 리터럴
- function
- ARC
- 패캠
- swiftUI
- 스위프트
- Operator
- 튜플
- iOS개발스쿨
- 컨버전
- var
- 패스트캠퍼스
- 타입
- 딕셔너리
- 개발스쿨
- ios
- array
- GCD
- 프로그래밍
- 열거형
- OOP
- tca
- fastcampus
- 깃허브
- Swift
- Dictionary
- fallthrough
- commit
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |