View Equatable e ambito di @State
Limiti l’ambito dello stato per ridurre le invalidazioni.
View Equatable e ambito di @State è 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.
L’uguaglianza può evitare lavoro
Se SwiftUI può dimostrare che gli input di una vista non sono cambiati, può evitare di eseguirne nuovamente il rendering. Rendere una vista Equatable offre a SwiftUI un modo preciso per decidere.
Conformità a Equatable
Renda la vista conforme a Equatable e SwiftUI confronterà i valori precedente e nuovo. Se sono uguali, eviterà di eseguire il body.
struct Badge: View, Equatable {
let count: Int
var body: some View { Text("\(count)") }
static func == (a: Badge, b: Badge) -> Bool {
a.count == b.count
}
}EquatableView
Può anche racchiudere qualsiasi vista Equatable con .equatable() per richiedere di saltare il rendering tramite confronto, senza modificare i punti in cui il tipo viene richiamato.
Badge(count: total)
.equatable()Quando Equatable è utile
Equatable è particolarmente utile per le viste con input rapidi da confrontare ma con un body costoso. Per essere vantaggioso, il costo del confronto deve essere molto inferiore a quello del rendering.
La trappola del costo del confronto
Se il vostro == è a sua volta costoso, ad esempio per confrontare in profondità array di grandi dimensioni, può costare più del rendering che state cercando di evitare. Confrontate solo campi economici da verificare e determinanti.
static func == (a: Self, b: Self) -> Bool {
a.id == b.id && a.version == b.version // cheap fields
}Equatable sintetizzato automaticamente
Se tutte le proprietà memorizzate sono Equatable, Swift può sintetizzare ==. Tuttavia, le closure e alcuni tipi non sono Equatable, quindi potrebbe essere necessaria un’implementazione personalizzata che li ignori.
struct Card: View, Equatable {
let title: String
let onTap: () -> Void // not Equatable
static func == (a: Card, b: Card) -> Bool { a.title == b.title }
var body: some View { Text(title) }
}Restringere l’ambito di @State
Uno stato collocato troppo in alto causa nuovamente il rendering di tutto ciò che si trova sotto di esso. Sposti @State nella vista più piccola che ne è proprietaria, così le modifiche interesseranno la porzione minima dell’interfaccia.
// Move toggle state into the row that uses it
struct Row: View {
@State private var expanded = false
var body: some View { /* only this row re-renders */ Text("Row") }
}Sollevare lo stato solo quando è condiviso
Sollevi lo stato solo quando più viste ne hanno realmente bisogno. In caso contrario, lo stato locale mantiene ridotto il raggio d’azione del rendering.
Estrarre sottoviste per localizzare gli aggiornamenti
Estrarre una parte che cambia frequentemente in una vista indipendente limita la rivalutazione a quella vista, lasciando inalterate le viste adiacenti.
struct LiveClock: View {
@State private var now = Date()
var body: some View { Text(now, style: .time) }
}Binding e ambito
Un @Binding collega una vista figlia allo stato della vista genitore. Passare un binding ristretto, relativo a un solo campo, invece dell’intero oggetto limita le modifiche che si propagano.
struct NameField: View {
@Binding var name: String // narrow binding
var body: some View { TextField("Name", text: $name) }
}Combinare Equatable con l’ambito
I risultati migliori si ottengono combinando più tecniche: collocare lo stato in un ambito ristretto per ridurre i fattori scatenanti e usare Equatable per saltare i rendering che si verificano comunque.
Verifica rapida: viste Equatable
Verifichi la sua comprensione delle viste Equatable e dell’ambito dello stato.
Riepilogo: viste Equatable e ambito dello stato
Rendere una vista Equatable (oppure usare .equatable()) consente a SwiftUI di saltare i rendering quando nulla è cambiato, un vantaggio quando il confronto è molto più economico del rendering e utilizza solo campi determinanti.
Restringa @State alla vista proprietaria più piccola, passi binding ristretti ed estragga le parti soggette a variazioni frequenti in viste indipendenti. Combinare un ambito dello stato ristretto con Equatable produce il minor numero possibile di rendering, al costo più basso.
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 «View Equatable e ambito di @State» è gratuita?
Sì — il testo completo di «View Equatable e ambito di @State» è 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 «View Equatable e ambito di @State»?
Limiti l’ambito dello stato per ridurre le invalidazioni. 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 «View Equatable e ambito di @State»?
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
- Comprendere l’identità delle view
- Riduzione della rivalutazione del body
- View Equatable e ambito di @State
- Profilazione con lo strumento SwiftUI