본문 바로가기

iOS

SwiftUI + TCA 튜토리얼 2 - Network

이번엔 네트워크 통신을 해봅시다.

 

누르면 통신작업을 진행할 FactButton 을 놓고,

if 구문으로 isLoading 에 따른 ProgreeView 가 보이거나 Text 가 보이게끔 뷰를 놓았습니다.

 

State: fact, isLoading 프로퍼티를 생성합니다.

Action: factButtonTapped, factResponse 케이스를 생성합니다.

기존 tapped case 도 잘 써주세요

 

factButtonTapped Action 을 감지했다면, .run 을 통해 네트워크 호출을 진행합니다.

try await 구문으로 data 를 가져오고, 디코딩을 진행합니다.

 

이때 중요한 지점이 결과 값을 바로 state.fact 에 접근해서 변경할 수 없다는 점이며, 사진을 참고해주시면 되겠습니다.

그렇기에 await send 를 통해 연관값을 포함해서 액션을 넣어줍니다.

 

그럼 이제 factResponse 액션을 감지하고, 연관값으로 넘겨받은 값을 이용해 상태를 변경합니다.

 

 

print 구문으로 1, 2, 3 을 작성해놓은 이유는 await 의 특성을 확인해봅시다.

1. send 를 보내고, 결과가 마무리 될 때까지 기다림

2. factResponse 코드 진행 -> 끝

3. 기다렸던 await 코드라인으로 돌아가서 다음 코드를 진행

4. 다음은 없으니 클로저구문은 끝

 

일반적인 비동기 처리 흐름은 이렇게 느껴진다.
1. 액션

2. educer 작업

3. return .run 클로저

4. await Action send

5. reducer 작업

6. await Action send 로 돌아와서 이후 코드 실행

 

최종 결과는 이렇게 순서대로 출력이 잘 되는 모습입니다.