Swift Academy · Oppitunti

@Published ja havainnointi Combinella

Miten @Published toimii sisäisesti ja välittää muutokset Combine-julkaisijoiden kautta.

Oppitunti 3/412 vaihetta

@Published ja havainnointi Combinella 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

`@Published` on Combine-kehyksen property wrapper, joka lähettää uuden arvon publisherin kautta aina, kun ominaisuus muuttuu.

`@Published`-ominaisuuden perusteet

```swift import Combine class Counter: ObservableObject { @Published var count = 0 } let c = Counter() let cancel = c.$count.sink { print("Count: \($0)") } c.count += 1 // "Count: 1" c.count += 1 // "Count: 2" ```

ObservableObject-protokolla

```swift class ViewModel: ObservableObject { @Published var title = "Initial" @Published var items: [String] = [] } ``` Jokainen `ObservableObject`-protokollan toteuttava luokka saa automaattisesti `objectWillChange`-publisherin.

objectWillChange-publisher

```swift class VM: ObservableObject { @Published var name = "" } let vm = VM() let cancel = vm.objectWillChange.sink { print("Will change") } vm.name = "Alice" // "Will change" printed before assignment ```

`@Published` ja SwiftUI:n `@StateObject`

```swift @StateObject var vm = ViewModel() // In View body: Text(vm.title) // Re-renders when vm.title changes ``` `@StateObject` omistaa ViewModelin, kun taas `@ObservedObject` tarkkailee ulkopuolelta omistettua oliota.

Publisherien ketjuttaminen `@Published`-arvosta

```swift class Search: ObservableObject { @Published var query = "" @Published var results: [String] = [] private var cancellables = Set() init() { $query .debounce(for: 0.3, scheduler: RunLoop.main) .sink { [weak self] q in self?.search(q) } .store(in: &cancellables) } } ```

`@Published` laukeaa ennen sijoitusta

`objectWillChange` laukeaa *ennen* kuin uusi arvo tallennetaan: ```swift vm.objectWillChange.sink { _ in print("will change") } $count.sink { n in print("is \(n)") } // Order: "will change" then "is 1" ```

Tilausten tallentaminen

```swift var cancellables = Set() c.$count .sink { print("\($0)") } .store(in: &cancellables) // cancellables keeps subscription alive ```

`@Published`-ominaisuuden rajoitukset

• Vain luokissa (viitetyypeissä) • Ei voi käyttää `let`-vakioissa • Ei toimi actor-rajojen yli ilman eksplisiittistä eristystä • Arvo julkaistaan *ennen* kuin sijoitus valmistuu (`willSet`-semantiikka)

Observation-makro (Swift 5.9+)

Swift 5.9 esittelee `@Observable`-makron yksinkertaisempana vaihtoehtona: ```swift @Observable class Counter { var count = 0 } // No Combine import needed; SwiftUI auto-subscribes ```

Pikatarkistus

Milloin `@Published` lähettää arvonsa — ennen ominaisuuden asettamista vai sen jälkeen?

Kertaus

Tärkeimmät asiat: • `@Published var x` tarjoaa `$x`-arvon `Publisher`-tyyppisenä • `ObservableObject` saa automaattisesti `objectWillChange`-publisherin • Arvo lähetetään ennen uuden arvon tallentamista (`willSet`) • Tallentakaa tilaukset `Set`-kokoelmaan • Swift 5.9: `@Observable` korvaa useimmat `@Published`-käyttötarpeet Seuraavaksi: property wrapperien koostaminen.
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 ”@Published ja havainnointi Combinella” ilmainen?

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

Miten @Published toimii sisäisesti ja välittää muutokset Combine-julkaisijoiden kautta. 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 ”@Published ja havainnointi Combinella”-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. Mukautetun ominaisuuskääreen luominen
  2. Projisoidut arvot ja $binding
  3. @Published ja havainnointi Combinella
  4. Useiden ominaisuuskääreiden yhdistäminen
← Takaisin: Swift Academy