監視可能なオブジェクト
CoddyのSwiftジャーニー「SwiftUI入門」セクションの一部。レッスン 40/50。
複数のビューで共有するデータや、独自のロジックを持つデータは、クラスに記述します。ObservableObject に準拠し、画面に表示する各プロパティには @Published を付けます。
class Cart: ObservableObject {
@Published var count = 0
func add() {
count += 1
}
}オブジェクトを作成するビューは、それを@StateObjectで保持します。SwiftUIは、ビューが画面上に表示されている間、その1つのオブジェクトを存続させ、公開されたプロパティが変更されるたびにビューを再描画します。
struct ContentView: View {
@StateObject private var cart = Cart()
var body: some View {
VStack {
Text("Items: \(cart.count)")
Button("Add to cart") {
cart.add()
}
}
}
}親から既存のオブジェクトを受け取る子ビューでは、代わりに @ObservedObject とマークします。このビューはオブジェクトを監視しますが、所有はしません。
チャレンジ
中級Scoreboard クラスは画面に接続されていません。これを ObservableObject にし、@Published の points を持たせ、@StateObject を使って ContentView に保存し、ボタンから scoreboard.score() を呼び出すようにしてください。1回タップした後、テキストは Points: 10 と表示される必要があります。
自分で試してみよう
import SwiftUI
@main
struct CoddyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
SwiftUI入門のすべてのレッスン
自分で練習してみよう: Swiftプレイグラウンド