はじめに
今回は@Publishedに関してアウトプットしていく。
@Stateと@Bindingについても記事にしているので良かったら見てくれ。
詳細
前提として、@State(値の変更を監視して、値が変更されたらViewの再描画をトリガーする)と似ている。
- オブジェクトの状態を監視し、それに応じてViewが自動的に再描画する(データフローをスムーズに管理)
- 通常、@Publishedは@OvservableObjectを継承したクラスで使用される。
- データモデルやビジネスロジックを表現するクラスでの状態管理に使用される。
ソースコード
Swift
// ボタンを押すとインクリメントされて、そのインクリメント状況を表示させる
// Modelの状態管理
// ObservableObjectを継承することによって、監視可能なオブジェクトであると示している
class CounterModel: ObservableObject {
//この値が変更されたら再描画
@Published var count: Int = 0
}
struct ContentView: View {
// ObservedObjectはObservableObjectを継承しているクラスを他のViewで使用する、すなわち、他のViewにインスタンス化(宣言)するためのプロパティラッパーである。
@ObservedObject var counterModel = CounterModel()
var body: some View {
VStack {
Text("\(counterModel.count)")
Button("インクリメントボタン") {
counterModel.count += 1
}
ChildView(counterModel: counterModel)
}
}
}
struct ChildView: View {
@ObservedObject var counterModel: CounterModel
var body: some View {
Text("現在のcounterModelの値: \(counterModel.count)")
}
}
おわりに
間違い等ありましたらコメント欄にてご指摘ください!
参考記事
開発環境
- Xcode-14.3
- Swift version 5.8