Swift Academy · Oppitunti

@ObservableObject ja @StateObject

Viitetyyppisten mallien luominen SwiftUI-näkymien ohjaamiseen @Published-ominaisuudella.

Oppitunti 2/412 vaihetta

@ObservableObject ja @StateObject on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Tervetuloa

Kun monimutkaista tilaa jaetaan useiden näkymien kesken, käyttäkää `ObservableObject`-protokollan mukaisia viitetyyppisiä malleja, joiden omistajana toimii `@StateObject` tai joita tarkkailee `@ObservedObject`.

ObservableObjectin määrittäminen

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

@StateObject — omistajuus

```swift struct ShopView: View { @StateObject private var cart = CartModel() // owns the model var body: some View { CartList(cart: cart) } } ``` Käyttäkää `@StateObject`-ominaisuutta, kun näkymä luo mallin ja omistaa sen.

@ObservedObject — ulkoinen omistajuus

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

Ero

• `@StateObject` — näkymä luo mallin, joka säilyy uudelleenpiirtojen välillä • `@ObservedObject` — malli välitetään näkymälle, joten ylätason näkymä voi luoda sen uudelleen Jos käytätte `@ObservedObject`-ominaisuutta tilanteessa, jossa tarvittaisiin `@StateObject`, malli nollautuu odottamatta.

objectWillChange-tilaus

SwiftUI tilaa automaattisesti `objectWillChange`-julkaisijan, kun käytössä on `@StateObject` tai `@ObservedObject`. Jokainen `@Published`-arvon muutos käynnistää uudelleenpiirron.

Manuaalinen objectWillChange

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

Sisäkkäiset ObservableObjectit

SwiftUI ei tarkkaile sisäkkäisiä ObservableObject-olioita automaattisesti. Välittäkää muutokset eteenpäin manuaalisesti: ```swift class Parent: ObservableObject { @Published var child = ChildModel() private var cancel: AnyCancellable? init() { cancel = child.objectWillChange.sink { [weak self] _ in self?.objectWillChange.send() } } } ```

@Observable-makro (Swift 5.9)

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

ObservableObjectin testaaminen

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

Pikatarkistus

Milloin kannattaa käyttää `@StateObject`- ja milloin `@ObservedObject`-ominaisuutta?

Kertaus

Tärkeimmät asiat: • `ObservableObject` + `@Published` = reaktiivinen malli • `@StateObject` — näkymä omistaa mallin, joka säilyy uudelleenpiirtojen välillä • `@ObservedObject` — malli välitetään näkymälle, joten omistajuus on sen ulkopuolella • `objectWillChange.send()` manuaalisia ilmoituksia varten • Swift 5.9:n `@Observable`-makro korvaa suurimman osan tästä Seuraavaksi: @EnvironmentObject.
Aloita maksutta

Opi Swift tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
122
Oppitunnit
409

Usein kysytyt kysymykset

Onko oppitunti ”@ObservableObject ja @StateObject” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “@ObservableObject ja @StateObject”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”@ObservableObject ja @StateObject”?

Viitetyyppisten mallien luominen SwiftUI-näkymien ohjaamiseen @Published-ominaisuudella. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”@ObservableObject ja @StateObject”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?

Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. @Binding: kaksisuuntainen tietovirta
  2. @ObservableObject ja @StateObject
  3. @EnvironmentObject jaettu tila
  4. Yksi totuuden lähde ja yksisuuntainen virtaus
← Takaisin: Swift Academy