Swift Academy · Oppitunti

@EnvironmentObject jaettu tila

Jaettujen mallien lisääminen syviin näkymähierarkioihin ilman ominaisuuksien välittämistä tasolta toiselle.

Oppitunti 3/412 vaihetta

@EnvironmentObject jaettu tila on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/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

`@EnvironmentObject` lisää jaetun mallin hierarkian kaikkiin näkymiin ilman, että sitä tarvitsee välittää erikseen — se sopii erinomaisesti sovelluksen laajuiseen tilaan, kuten käyttäjän todennukseen tai teema-asetuksiin.

Lisääminen hierarkiaan

```swift struct App: App { @StateObject var authModel = AuthModel() var body: some Scene { WindowGroup { RootView().environmentObject(authModel) } } } ```

Käyttäminen @EnvironmentObject-ominaisuudella

```swift struct ProfileView: View { @EnvironmentObject var auth: AuthModel var body: some View { Text("Hello, \(auth.username)!") } } // No init parameter needed — auto-injected from environment ```

Puuttuvan ympäristöolion aiheuttama kaatuminen

Jos käytätte `@EnvironmentObject`-ominaisuutta lisäämättä oliota ympäristöön, sovellus kaatuu ajon aikana: ``` Fatal error: No ObservableObject of type AuthModel found. A View.environmentObject(_:) must be attached to ancestor. ```

EnvironmentObject esikatseluissa

```swift #Preview { ProfileView().environmentObject(AuthModel.mock) } ```

Useita ympäristöolioita

```swift RootView() .environmentObject(authModel) .environmentObject(cartModel) .environmentObject(themeModel) ``` Kukin tyyppi tunnistetaan oman tyyppinsä perusteella, joten nimiristiriitoja ei synny.

Vertailu: @EnvironmentObject ja @ObservedObject

• `@ObservedObject` — eksplisiittinen init-parametri, riippuvuudet ovat selkeästi näkyvissä • `@EnvironmentObject` — ei init-parametria, implisiittinen lisääminen ympäristöstä Suosikaa selkeyden vuoksi `@ObservedObject`-ominaisuutta ja käyttäkää `@EnvironmentObject`-ominaisuutta aidosti globaalissa tilassa.

Sisäkkäisten näkymien lisääminen ympäristöön

```swift View A (.environmentObject(model)) └── View B (@EnvironmentObject var model) ✓ └── View C (@EnvironmentObject var model) ✓ — inherits ```

@Environment järjestelmäarvoille

Älkää sekoittako tätä `@Environment`-ominaisuuteen, jossa ei ole Object-päätettä: ```swift @Environment(\.colorScheme) var scheme // system dark/light @Environment(\.locale) var locale // current locale ```

Käytännön malli: AppModel

```swift @Observable class AppModel { var isLoggedIn = false var username = "" var cart: [Item] = [] } ``` Nykyaikainen lähestymistapa: lisää juurinäkymään yksi `@Observable`-sovellusmalli.

Pikatarkistus

Mitä tapahtuu, jos käytätte `@EnvironmentObject`-ominaisuutta lisäämättä oliota ympäristöön?

Kertaus

Tärkeimmät asiat: • `.environmentObject(model)` lisää mallin koko alipuuhun • `@EnvironmentObject var m: ModelType` — lisätään automaattisesti ilman parametria • Puuttuva lisäys ympäristöön = kaatuminen ajon aikana • Lisätkää olio aina myös esikatseluihin • `@Environment(\.key)` järjestelmäarvoille (eri API) Seuraavaksi: Single Source of Truth.
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 ”@EnvironmentObject jaettu tila” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “@EnvironmentObject jaettu tila”. 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 ”@EnvironmentObject jaettu tila”?

Jaettujen mallien lisääminen syviin näkymähierarkioihin ilman ominaisuuksien välittämistä tasolta toiselle. 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 3/4.

Kuinka kauan ”@EnvironmentObject jaettu tila”-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