Swift Academy · Lezione

@Published e osservazione in Combine

Capire come funziona @Published internamente per emettere modifiche tramite i publisher di Combine.

Lezione 3 di 412 passaggi

@Published e osservazione in Combine è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.

Benvenuto

`@Published` è un property wrapper del framework Combine che emette un nuovo valore tramite un publisher ogni volta che la proprietà cambia.

Nozioni di base su @Published

```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" ```

Protocollo ObservableObject

```swift class ViewModel: ObservableObject { @Published var title = "Initial" @Published var items: [String] = [] } ``` Qualsiasi classe conforme a `ObservableObject` riceve gratuitamente un publisher `objectWillChange`.

Publisher objectWillChange

```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 con SwiftUI @StateObject

```swift @StateObject var vm = ViewModel() // In View body: Text(vm.title) // Re-renders when vm.title changes ``` `@StateObject` possiede il ViewModel; `@ObservedObject` osserva un oggetto di proprietà esterna.

Concatenare publisher da @Published

```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 viene emesso prima dell'assegnazione

`objectWillChange` viene emesso *prima* che il nuovo valore venga memorizzato: ```swift vm.objectWillChange.sink { _ in print("will change") } $count.sink { n in print("is \(n)") } // Order: "will change" then "is 1" ```

Memorizzare le sottoscrizioni

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

Limitazioni di @Published

• Solo nelle classi, ovvero nei tipi di riferimento • Non può essere utilizzato con le costanti `let` • Non funziona oltre i confini degli actor senza un isolamento esplicito • Il valore viene pubblicato *prima* del completamento dell'assegnazione, secondo la semantica di willSet

Macro Observation (Swift 5.9+)

Swift 5.9 introduce `@Observable` come alternativa più semplice: ```swift @Observable class Counter { var count = 0 } // No Combine import needed; SwiftUI auto-subscribes ```

Verifica rapida

Quando emette il proprio valore `@Published`: prima o dopo l'impostazione della proprietà?

Riepilogo

Concetti chiave: • `@Published var x` espone `$x` come `Publisher` • `ObservableObject` riceve gratuitamente un publisher `objectWillChange` • Viene emesso prima che il nuovo valore venga memorizzato, secondo la semantica di willSet • Memorizzare le sottoscrizioni in `Set` • Swift 5.9: `@Observable` sostituisce la maggior parte dei casi d'uso di `@Published` Prossimo argomento: composizione dei property wrapper.
Gratis per iniziare

Impara Swift con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
122
Lezioni
409

Domande Frequenti

La lezione «@Published e osservazione in Combine» è gratuita?

Sì — il testo completo di «@Published e osservazione in Combine» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.

Cosa imparerò in «@Published e osservazione in Combine»?

Capire come funziona @Published internamente per emettere modifiche tramite i publisher di Combine. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Swift Academy?

Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «@Published e osservazione in Combine»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Swift Academy?

Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Creare un property wrapper personalizzato
  2. Valori proiettati con $binding
  3. @Published e osservazione in Combine
  4. Comporre più property wrapper
← Torna a Swift Academy