0Pricing
Swift Academy · レッスン

@ObservableObjectと@StateObject

@Publishedを介してSwiftUIのViewを駆動する参照型モデルを作成します。

「@ObservableObjectと@StateObject」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

ようこそ

複数のビューで共有する複雑な状態には、`ObservableObject` に準拠する参照型モデルを使用し、`@StateObject` で所有するか、`@ObservedObject` で監視します。

ObservableObject の定義

```swift class CartModel: ObservableObject { @Published var items: [CartItem] = [] @Published var total: Double = 0 func add(_ item: CartItem) { items.append(item) } } ```

@StateObject — 所有権

```swift struct ShopView: View { @StateObject private var cart = CartModel() // owns the model var body: some View { CartList(cart: cart) } } ``` ビューがモデルを作成して所有する場合は `@StateObject` を使用します。

@ObservedObject — 外部所有

```swift struct CartList: View { @ObservedObject var cart: CartModel // doesn't own; passed in var body: some View { List(cart.items) { item in Text(item.name) } } } ```

違い

• `@StateObject` — ビューがモデルを作成し、モデルは再レンダリング後も保持されます • `@ObservedObject` — モデルは渡されるため、親によって再作成される場合があります `@StateObject` が必要な場所で `@ObservedObject` を使用すると、モデルが予期せずリセットされます。

objectWillChange の購読

`@StateObject` または `@ObservedObject` を使用すると、SwiftUI は自動的に `objectWillChange` を購読します。`@Published` の変更が発生するたびに、再レンダリングが実行されます。

objectWillChange の手動通知

```swift class Timer: ObservableObject { var count = 0 func tick() { objectWillChange.send() // manual notification count += 1 } } ```

ネストした ObservableObject

SwiftUI はネストした ObservableObject を自動的には監視しません。変更を手動で転送してください: ```swift class Parent: ObservableObject { @Published var child = ChildModel() private var cancel: AnyCancellable? init() { cancel = child.objectWillChange.sink { [weak self] _ in self?.objectWillChange.send() } } } ```

@Observable マクロ(Swift 5.9)

```swift @Observable class Counter { var count = 0 } // No ObservableObject, no @Published, no @StateObject needed // SwiftUI automatically tracks access ```

ObservableObject のテスト

```swift func testCart() { let cart = CartModel() cart.add(CartItem(name:"Apple",price:1.0)) XCTAssertEqual(cart.items.count, 1) XCTAssertEqual(cart.total, 1.0) } ```

確認問題

`@StateObject` と `@ObservedObject` は、それぞれどのような場合に使用しますか?

まとめ

重要なポイント: • `ObservableObject` + `@Published` = リアクティブなモデル • `@StateObject` — ビューがモデルを所有し、再レンダリング後も保持します • `@ObservedObject` — モデルを渡し、外部で所有します • 手動で通知するには `objectWillChange.send()` を使用します • Swift 5.9 の `@Observable` マクロは、これらの大部分を置き換えます 次は `@EnvironmentObject` です。

よくある質問

「@ObservableObjectと@StateObject」レッスンは無料ですか?

はい。「@ObservableObjectと@StateObject」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「@ObservableObjectと@StateObject」で何を学びますか?

@Publishedを介してSwiftUIのViewを駆動する参照型モデルを作成します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「@ObservableObjectと@StateObject」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. @Binding:双方向のデータフロー
  2. @ObservableObjectと@StateObject
  3. 共有状態のための@EnvironmentObject
  4. 単一の信頼できる情報源と単方向フロー
← Swift Academyに戻る