TCA の Reducer の実装で補完を効かせる方法

2023/09/10に公開

TCA の Reducer の実装では、以下のようなコードを書くと思います。

var body: some ReducerOf<Self> {
  Reduce { state, action in
    switch action {
    case .xxx:
      // ...
    case .yyy:
      // ...
    // ...
    }
  }
}

このようなコードを実装していく時、Reduce 内で Action の case 名の補完が出てこなくなったりして、自力でコードを書かなければいけない状況に陥ってしまったことはないでしょうか。私はよく陥っています。
マルチモジュール化してあげれば多少改善はすることはありますが、それでも補完してくれないことがあります。Xcode 15 でも全然陥ってしまいます。

そんな時は、上記のコードを以下のようにしてみると、スイスイ補完されるようになるかもしれません。

var body: some ReducerOf<Self> {
-  Reduce { state, action in
+  Reduce<State, Action> { state, action in
    switch action {
    case .xxx:
      // ...
    case .yyy:
      // ...
    // ...
    }
  }
}

たったこれだけです。
この Tips は Discussion に記載されていました。

https://github.com/pointfreeco/swift-composable-architecture/discussions/1666#discussioncomment-4212335

明示しなければいけないのはちょっと悲しいですが、そんなに手間ではない方法で快適に開発できるようになるので、基本明示してあげるのが良いかもしれないと思いました。

Discussion