🍎

TCAのバージョンを1.2.0へアップデートした際に対応した事

2023/09/19に公開

概要

TCAのバージョンを0.5.2から1.2.0(2023/9/19時点で最新)へアップデートした際に対応した事をまとめました。
環境や使用しているAPIによっては本記事で記載した以上に対応する必要がある可能性がありますので、本記事で全て対応できるわけではないですが、アップデートする際の手助けになれば幸いです。

環境

この記事は以下のバージョン環境のもと作成されたものです。
【Xcode】14.3
【iOS】16.4
【macOS】Ventuta

主な対応一覧

以下実際に対応した事一覧です。

  • ReducerProtocolをReducerへリネーム
  • EffectTaskをEffectへリネーム
  • .taskを.runもしくは.sendへリファクタ
  • Storeの初期化を修正
  • SwitchStore/CaseLetの修正
  • WithViewStore(store.stateless) 削除、修正

以上です。
Reducerへリネーム及び、Effectへリネームはリネームするだけなので詳細について記載しませんが、その他は以下で実際に対応した内容を紹介します。

.taskを.runもしくは.sendへリファクタ

.taskや.fireAndForgetに関しては.runもしくは.sendへ書き換える必要がある。

.task -> .send

  • 修正前
.task { .hogeAction }
  • 修正後
.send(.hogeAction)

.task -> .run

  • 修正前
.task {
    return .hogeAction
}
  • 修正後
.run { send in
    await send(.hogeAction)
}

.fireAndForget -> .run

  • 修正前
.fireAndForget { await hogeAction }
  • 修正後
.run { _ in await hogeAction }

Storeの初期化を修正

Storeの初期化ではreducerを削除してクロージャーの形に修正する必要がある。

  • 修正前
store: Store(
    initialState: HogeReducer.State(),
    reducer: HageReducer()
)
  • 修正後
store: Store(
    initialState: HogeReducer.State()) {
    HageReducer()
}

SwitchStore/CaseLetの修正

CaseLetをswitch $0 { } で加工必要があると同時に各CaseLetに対してcaseを書く必要がある。

  • 修正前
SwitchStore(self.store) {
    CaseLet {
        ...
    }
}
  • 修正後
SwitchStore(self.store) {
    switch $0 {
    case .hoge:
        CaseLet {
            ...
        }
    }
}

WithViewStore(store.stateless) 削除、修正

store.statelessを使用して.sendしていた箇所はstore.sendに修正する必要がある。
その為WithViewStore(store.stateless) { viewStore in ... } などでviewStore.sendとしていたViewなどもstore.sendで直接storeから送れるのでwithViewStoreを削除する箇所もある。

  • 修正前
WithViewStore(store.stateless) { viewStore in
    ...
    viewStore.send(.hoge)
  • 修正後
// 削除 -> WithViewStore(store.stateless) { viewStore in
...
store.send(.hoge)

まとめ

以上です。全て網羅しているわけではないですが誰かの参考になれば🙌

Discussion