0Pricing
Swift Academy · Lezione

Comporre più property wrapper

Combinare property wrapper e comprenderne l’ordine di inizializzazione.

Comporre più property wrapper è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 4 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

È possibile applicare più property wrapper a una singola proprietà. L'ordine è importante: i wrapper esterni avvolgono quelli interni e l'ordine di inizializzazione segue l'ordine delle dichiarazioni.

Annidamento dei wrapper

```swift @propertyWrapper struct A { var wrappedValue: Int { didSet { print("A") } } init(wrappedValue: Int) { self.wrappedValue = wrappedValue } } @propertyWrapper struct B { var wrappedValue: Int { didSet { print("B") } } init(wrappedValue: Int) { self.wrappedValue = wrappedValue } } struct S { @A @B var x = 0 } ```

Il wrapper esterno avvolge quello interno

Quando scrive `@A @B var x`, la trasformazione equivalente è: ```swift var _x: A> = A(wrappedValue: B(wrappedValue: 0)) ``` A avvolge B, che a sua volta avvolge Int.

Esempio reale: @NonEmpty + @Trimmed

```swift @propertyWrapper struct Trimmed { var wrappedValue: String { didSet { wrappedValue = wrappedValue.trimmingCharacters(in:.whitespaces) } } init(wrappedValue: String) { self.wrappedValue = wrappedValue.trimmingCharacters(in:.whitespaces) } } @propertyWrapper struct NonEmpty { var wrappedValue: String { didSet { if wrappedValue.isEmpty { wrappedValue = "(empty)" } } } init(wrappedValue: String) { self.wrappedValue = wrappedValue.isEmpty ? "(empty)" : wrappedValue } } struct Form { @NonEmpty @Trimmed var username = " " } ```

Ordine di inizializzazione

I wrapper vengono inizializzati dall'esterno verso l'interno. Ciò significa che l'inizializzatore del wrapper esterno riceve il risultato della trasformazione del wrapper interno, non il valore originale.

Limiti dell'annidamento

• Non tutti i wrapper possono essere composti senza problemi: verifichi che i tipi di `wrappedValue` corrispondano • Il compilatore Swift potrebbe non consentire sempre più wrapper (dipende dalla compatibilità dei tipi wrapped) • L'accesso a `projectedValue` tramite `$x` raggiunge solo la proiezione del wrapper più esterno

Esempio SwiftUI: @EnvironmentObject + Observation

SwiftUI non consente di annidare `@EnvironmentObject` e `@Published` nella stessa proprietà, ma è possibile osservare modelli `@EnvironmentObject` che usano internamente `@Published`.

Debug dei wrapper annidati

Utilizzi `_propertyName` per accedere direttamente all'istanza del wrapper: ```swift print(form._username) // A> — the outer wrapper instance ```

Alternativa: comporre tutto in un unico wrapper

Spesso è più pulito comporre la logica all'interno di un unico wrapper: ```swift @propertyWrapper struct CleanUsername { var wrappedValue: String { didSet { wrappedValue = clean(wrappedValue) } } func clean(_ s: String) -> String { let t = s.trimmingCharacters(in:.whitespaces) return t.isEmpty ? "(empty)" : t } } ```

Pattern pratici per l'annidamento

Combinazioni comuni valide: • `@UserDefault` + `@Published` (persistenza dei dati + osservazione) • `@NonNegative` + `@Clamped` (livelli di convalida) • Specifico dei framework: `@Environment` + `@Binding` nelle viste SwiftUI

Verifica rapida

Quando due property wrapper sono annidati, quale viene inizializzato per primo?

Riepilogo

Punti chiave: • `@A @B var x` viene trasformato in `A>` • Il wrapper esterno viene inizializzato usando il `wrappedValue` del wrapper interno come input • `$x` raggiunge solo il `projectedValue` più esterno • `_x` consente di accedere direttamente all'istanza del wrapper • Quando possibile, preferisca un unico wrapper composto a un annidamento profondo Corso completato! Prossimo argomento: Result.

Domande Frequenti

La lezione «Comporre più property wrapper» è gratuita?

Sì — il testo completo di «Comporre più property wrapper» è 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 «Comporre più property wrapper»?

Combinare property wrapper e comprenderne l’ordine di inizializzazione. 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 4 di 4.

Quanto tempo richiede la lezione «Comporre più property wrapper»?

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