0Pricing
Swift Academy · Lezione

Comprendere l’identità delle view

Controlli come SwiftUI calcola le differenze e riutilizza le view.

Comprendere l’identità delle view è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 1 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.

L'identità guida SwiftUI

SwiftUI tiene traccia di ogni vista tramite la sua identità per decidere se aggiornare una vista esistente o crearne una nuova.

Gestire correttamente l'identità è il fattore singolo più importante per la correttezza e le prestazioni.

Due tipi di identità

SwiftUI utilizza due forme di identità: identità strutturale, ovvero la posizione della vista nell'albero delle viste, e identità esplicita, ovvero un identificatore assegnato da Lei.

Identità strutturale

Per impostazione predefinita, l'identità di una vista deriva dalla posizione che occupa nella gerarchia. I rami di if seguenti creano due viste strutturalmente distinte.

var body: some View {
    if isOn {
        Text("On")  // one identity
    } else {
        Text("Off") // a different identity
    }
}

Perché i rami perdono lo stato

Poiché ogni ramo ha un'identità strutturale diversa, passando dall'uno all'altro la prima vista viene distrutta e la seconda viene creata. Qualsiasi @State al loro interno viene reimpostato.

if isExpanded {
    DetailView() // new instance each time the branch flips
} else {
    SummaryView()
}

Identità esplicita con id()

Il modificatore .id(_:) assegna un'identità esplicita. Cambiare l'id comunica a SwiftUI «questa è una vista diversa», forzando la creazione di una nuova istanza e la reimpostazione dello stato.

CounterView()
    .id(selectedTab) // new identity per tab

Identità in ForEach

ForEach richiede un'identità stabile per ogni elemento. Utilizzi un key path verso un identificatore stabile, mai l'indice dell'array per raccolte modificabili.

ForEach(items, id: \.id) { item in
    RowView(item: item)
}

Il problema dell'identità basata sull'indice

Usare id: \.self per indici o valori che cambiano riordina le identità quando i dati vengono modificati, causando animazioni errate e perdita dello stato.

// Risky if items reorder or values repeat:
// ForEach(0..<items.count, id: \.self) { ... }

Identità e animazione

Le animazioni interpolano tra gli stati della stessa identità. Se l'identità cambia, SwiftUI esegue una transizione di inserimento/rimozione invece di un'animazione fluida.

withAnimation {
    // same identity -> property animates
    // changed id     -> transition (fade/slide)
}

I modificatori condizionali cambiano l'identità

Applicare un modificatore all'interno di un if può cambiare l'identità strutturale e reimpostare lo stato. Preferisca una singola vista con il valore del modificatore calcolato in modo condizionale.

// Better: keep one identity
Text("Hi")
    .opacity(isHidden ? 0 : 1)
// Worse: branching creates two identities

AnyView cancella le informazioni sull'identità

Racchiudere le viste in AnyView nasconde il loro tipo a SwiftUI, riducendo la possibilità di confrontarle in modo efficiente. Ove possibile, utilizzi invece tipi concreti o @ViewBuilder.

// Prefer @ViewBuilder over returning AnyView
@ViewBuilder
func content() -> some View {
    if flag { A() } else { B() }
}

Identità stabile = stato stabile

Regola pratica: mantenga stabile l'identità quando desidera preservare lo stato e le animazioni fluide; cambi deliberatamente l'identità quando vuole davvero ripartire da zero.

Verifica rapida: identità delle viste

Verifichi la Sua comprensione dell'identità delle viste.

Riepilogo: comprensione dell'identità delle viste

SwiftUI identifica le viste in modo strutturale, in base alla posizione nell'albero, ed esplicito, tramite .id. Un'identità stabile preserva @State e consente un'animazione fluida delle proprietà; cambiare identità reimposta lo stato e attiva le transizioni.

Assegni a ForEach identificatori stabili, eviti l'identità basata sull'indice per dati modificabili, riduca al minimo i rami che alternano l'identità ed eviti AnyView quando è possibile usare un tipo concreto.

Domande Frequenti

La lezione «Comprendere l’identità delle view» è gratuita?

Sì — il testo completo di «Comprendere l’identità delle view» è 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 «Comprendere l’identità delle view»?

Controlli come SwiftUI calcola le differenze e riutilizza le view. 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 1 di 4.

Quanto tempo richiede la lezione «Comprendere l’identità delle view»?

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. Comprendere l’identità delle view
  2. Riduzione della rivalutazione del body
  3. View Equatable e ambito di @State
  4. Profilazione con lo strumento SwiftUI
← Torna a Swift Academy