💨
TCAバージョン1.5マイグレーションまとめ
TCA v1.5.0
- 11/26 TCA v1.5.0がリリースされました
- https://github.com/pointfreeco/swift-composable-architecture/releases/tag/1.5.0
- はやすぎ
- ちょっと前に1.4のマイグレーションをまとめたばかりなのに…
- 公式のマイグレーションガイドはこちら
- 本稿はこれのまとめです
- 1.5.0には他にもいくつかの修正があります。ここではすべて取り上げません
scope(state:action:)
のキーパス対応
- 1.4で登場した
CaseKeyPath
マクロ(CasePathがキーパスで書けるようになるマクロ)の影響 - 第二引数(action)はクロージャだったが、キーパスを取れるメソッドが追加された
// before ChildView( store: self.store.scope( state: \.child, action: { .child($0) } ) ) // after🆕 ChildView( store: self.store.scope( state: \.child, action: \.child ) )
- 旧scope(state:action:)は
soft-deprecated
となっている- soft-deprecated: 将来的に廃止
- キーパスがHashableに準拠しているため、スコープメソッドはストアをキャッシュすることが可能になるとのこと
- 同じStateとActionでスコープした場合は、キャッシュから作成済みのストアを利用することでパフォーマンスが向上する⏫
列挙型ナビゲーション(ナビゲーションAPIの改善)
- スコープメソッドと同じく、ナビゲーションを行うAPIにもCaseKeyPathの対応が入った
// before .sheet( store: self.store.scope(state: \.$destination, action: { .destination($0) }), state: \.editForm, action: { .editForm($0) } ) // after🆕 .sheet( store: self.store.scope( state: \.$destination.editForm, action: \.destination.editForm ) )
- スコープメソッド同様に旧メソッドはsoft-deprecatedとなった。対象となるのは
store
,state
,action
の引数を持つメソッド- alert(store:state:action:)
- confirmationDialog(store:state:action:)
- fullScreenCover(store:state:action:)
- navigationDestination(store:state:action)
- popover(store:state:action:)
- sheet(store:state:action:)
- IfLetStore.init(_:state:action:then:)
- IfLetStore.init(_:state:action:then:else:)
- 列挙型ナビゲーションって訳したけど、本家は
Enum-driven navigation
です
まとめ
- リリース速度はっやい
- はっやいけど、1.4のリリース内容を理解していれば馴染みやすリリースでした
Discussion