SwiftUI

TCA(7) : 0.54.0 -> 1.0.0 업데이트

Phililip
728x90

안녕하세요.

 

TCA 1.0.0이 배포된 것을 기념(?)하여, 제가 만든 TCA 샘플 프로젝트의 TCA 버전을 0.54.0 -> 1.0.0으로 업데이트해 보는 시간을 가져볼게요.

(전체 코드는 여기를 참고해 주세요!)


아마 저처럼 TCA 0.x.x. 버전을 쓰시다가 1.0.0 버전으로 업데이트한 경우라면, 빌드 에러가 발생할 확률이 매우 큽니다..

 

하나씩 고쳐볼게요ㅠㅠ

 

 

## (변경사항 0) deprecated API 제거

가장 큰 이유는 TCA 1.0.0으로 오면서 이전 deprecated 된 API들이 모두 제거되었어요.

 

만약, deprecated 된 API를 사용 중이시라면 모두 수정해야 합니다.

 

 

## (변경사항 1) ReducerProtocol -> Reducer

ReducerProtocol이 Reducer로 이름이 변경되었습니다.

 

단순히 이름만 바뀌었기 때문에, ReducerProtocol -> Reducer로 바꿔주기만 하면 됩니다.

 

 

 

## (변경사항 2) EffectTask -> Effect

마찬가지로 EffectTask도 Effect로 이름이 변경되었습니다.

 

 

 

## (변경사항 3) deprecated 된 Store 생성자 API 제거

Store의 init(initialState:reducer:environment:) 생성자 대신 init(initialState:reducer:withDependencies:)를 사용해야 합니다.

(deprecated 된 줄 모르고 쓰고 있었군요...;;;)

 

둘이 큰 차이가 없어 보이지만 제거된 생성자(init(initialState:reducer:environment:))는 파라미터로 Reducer 객체를 받지만,

 

 

현재 사용 가능한 생성자(init(initialState:reducer:withDependencies:))는 파라미터가 ReducerBuilder 타입이기 때문에 클로저로 Reducer를 받아야 합니다.

 

[주의] 이전 생성자를 사용할 경우 아래와 같은 에러가 발생합니다.

Cannot convert value of type 'Root.State' to expected argument type '_'
Cannot convert value of type 'Root' to expected argument type '() -> R'
Generic parameter 'R' could not be inferred

 

 

## (변경사항 4) ViewStore(store).send(xxx) -> store.send(xxx)

ViewStore(store).send(xxx) 대신 store.send(xxx)를 사용해야 합니다.

 

업데이트 전에는 ViewStore(store).send(xxx)를 사용해서 WithViewStore를 사용하지 않고도 이벤트를 발생시킬 수 있었는데요.

 

업데이트 이후부턴 ViewStore를 생성하지 않고 Store 객체가 이벤트를 발생시킬 수 있도록 변경되었습니다.

 

[주의] ViewStore(store).send(xxx) 함수를 사용할 경우 아래와 같은 에러가 발생합니다.

Generic parameter 'ViewState' could not be inferred
Explicitly specify the generic arguments to fix this issue
Missing argument for parameter 'observe' in call
Insert ', observe: <#(TwoCounter.State) -> _#>'

 

 

샘플 프로젝트는 이 정도만 수정하면 될 것 같은데.. 서비스 중인 앱의 TCA 버전을 업데이트할 생각에 설레네요....;;;;

 

 

 

# 요약

- TCA 1.0.0에서 큰 변화가 있었다.
- ReducerProtocol -> Reducer로 변경
- EffectTask -> Effect로 변경
- hard deprecated
- store 객체가 이벤트 발생(생성) 가능

 


이번 글은 여기서 마무리.

 

 

 

반응형

'SwiftUI' 카테고리의 다른 글

WebView 당겨서 새로고침(Pull to Refresh) 기능 추가하기  (0) 2023.09.05
TCA(8) : Binding  (1) 2023.08.09
TCA(6) : WebView  (0) 2023.07.28
TCA(5) : 부모-자식 간 이벤트 전달  (0) 2023.07.20
TCA(4) : Scope  (1) 2023.07.12