Menu
Coddy logo textTech

監視可能なオブジェクト

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 とマークします。このビューはオブジェクトを監視しますが、所有はしません。

challenge icon

チャレンジ

中級

Scoreboard クラスは画面に接続されていません。これを ObservableObject にし、@Publishedpoints を持たせ、@StateObject を使って ContentView に保存し、ボタンから scoreboard.score() を呼び出すようにしてください。1回タップした後、テキストは Points: 10 と表示される必要があります。

自分で試してみよう

import SwiftUI

@main
struct CoddyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

SwiftUI入門のすべてのレッスン

自分で練習してみよう: Swiftプレイグラウンド