はじめに
TCAを勉強中で完全に理解しているわけではないので、間違っている箇所があればコメントで教えてください。
Reducerはこんな感じ
import ComposableArchitecture
struct Feature: Reducer {
struct State: Equatable {
var text = "Hello, World!"
}
enum Action: Equatable {
}
func reduce(into state: inout State, action: Action) -> Effect<Action> {
}
}
実装1
import SwiftUI
import ComposableArchitecture
struct ContentView: View {
let store: StoreOf<Feature>
var body: some View {
WithViewStore(store, observe: { $0 }) { viewStore in
Text("Hello, World!")
}
}
}
実装2
import SwiftUI
import ComposableArchitecture
struct ContentView: View {
@ObservedObject private var viewStore: ViewStoreOf<Feature>
let store: StoreOf<Feature>
init(store: StoreOf<Feature>) {
self.store = store
self.viewStore = ViewStore(store, observe: { $0 })
}
var body: some View {
Text(viewStore.text)
}
}
公式コメント
ViewStoreの説明
ViewStore
は状態の変化を監視し、アクションを送信できるオブジェクトです。SwiftUI のビュー、UIView や UIViewController などのビューで最も一般的に使用されますが、状態を監視したり、アクションを送信したりする意味があれば、どこでも使用できます。SwiftUI アプリケーションでは、
ViewStore
はWithViewStore
ビューを使用して最も一般的にアクセスされます。
ビューを使ってアクセスします。ビューストアとビューを返すクロージャで初期化することができます
@ObservedObjectを使うこともできるよ
ビューストアは、ビュー、シーン、コマンド、および
@ObservedObject
プロパティラッパーをサポートする他のコンテキストによって直接観察することもできます
エラー出るなら@ObservedObjectを使ってみて
ヒント:
WithViewStore
を使用したビューでコンパイル時に問題が発生する場合は、代わりに@ObservedObject
プロパティラッパーを使用してビューストアを直接観察してみてください。
おわり
ここファイルに書いてあります。
基本はWithViewStore
を使えってことでしょうか?
いまいちわからないです