0Pricing
Swift Academy · Pelajaran

@ObservableObject dan @StateObject

Membuat model bertipe referensi yang menggerakkan view SwiftUI melalui @Published.

@ObservableObject dan @StateObject adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.

Selamat Datang

Untuk status kompleks yang digunakan bersama oleh beberapa tampilan, gunakan model bertipe referensi yang sesuai dengan `ObservableObject`, dimiliki oleh `@StateObject` atau diamati oleh `@ObservedObject`.

Mendefinisikan ObservableObject

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

@StateObject — Kepemilikan

```swift struct ShopView: View { @StateObject private var cart = CartModel() // owns the model var body: some View { CartList(cart: cart) } } ``` Gunakan `@StateObject` saat tampilan membuat dan memiliki model.

@ObservedObject — Kepemilikan Eksternal

```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) } } } ```

Perbedaannya

• `@StateObject` — tampilan membuat model; model tetap ada selama proses render ulang • `@ObservedObject` — model diteruskan dari luar; model dapat dibuat ulang oleh induk Penggunaan `@ObservedObject` saat `@StateObject` diperlukan menyebabkan model diatur ulang secara tidak terduga.

Langganan objectWillChange

SwiftUI secara otomatis berlangganan `objectWillChange` saat menggunakan `@StateObject` atau `@ObservedObject`. Setiap perubahan `@Published` memicu render ulang.

Penggunaan Manual objectWillChange

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

ObservableObjects Bertingkat

SwiftUI tidak mengamati ObservableObjects bertingkat secara otomatis. Teruskan perubahan secara manual: ```swift class Parent: ObservableObject { @Published var child = ChildModel() private var cancel: AnyCancellable? init() { cancel = child.objectWillChange.sink { [weak self] _ in self?.objectWillChange.send() } } } ```

Makro @Observable (Swift 5.9)

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

Menguji 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) } ```

Pemeriksaan Singkat

Kapan Anda harus menggunakan `@StateObject` dibandingkan `@ObservedObject`?

Ringkasan

Poin penting: • `ObservableObject` + `@Published` = model reaktif • `@StateObject` — tampilan memiliki model; model tetap ada selama proses render ulang • `@ObservedObject` — model diteruskan dari luar; kepemilikan eksternal • `objectWillChange.send()` untuk notifikasi manual • Makro `@Observable` Swift 5.9 menggantikan sebagian besar pendekatan ini Berikutnya: @EnvironmentObject.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “@ObservableObject dan @StateObject” gratis?

Ya — teks lengkap “@ObservableObject dan @StateObject” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “@ObservableObject dan @StateObject”?

Membuat model bertipe referensi yang menggerakkan view SwiftUI melalui @Published. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Swift Academy?

Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “@ObservableObject dan @StateObject” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?

Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. @Binding: Aliran Data Dua Arah
  2. @ObservableObject dan @StateObject
  3. @EnvironmentObject untuk Keadaan Bersama
  4. Satu Sumber Kebenaran dan Aliran Searah
← Kembali ke Swift Academy