Equatable views en @State-scope
Beperk de state om invalidatie te minimaliseren.
Equatable views en @State-scope is een gratis Swift Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Swift Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Swift Academy bevat in totaal 4 lessen.
Gelijkheid kan onnodig werk voorkomen
Als SwiftUI kan bewijzen dat de invoer van een weergave ongewijzigd is, kan het het opnieuw renderen ervan overslaan. Door een weergave Equatable te maken, geef je SwiftUI een nauwkeurige manier om dat te bepalen.
Voldoen aan Equatable
Laat je weergave voldoen aan Equatable, zodat SwiftUI oude en nieuwe waarden vergelijkt. Als ze gelijk zijn, slaat het de body over.
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
Je kunt elke weergave die aan Equatable voldoet ook omwikkelen met .equatable() om overslaan op basis van een vergelijking aan te vragen, zonder overal de aanroeppunten van het type te wijzigen.
Badge(count: total)
.equatable()Wanneer Equatable helpt
Equatable is vooral nuttig voor weergaven met invoer die goedkoop te vergelijken is, maar waarvan de body veel kost. De vergelijkingskosten moeten veel lager zijn dan de renderkosten om dit de moeite waard te maken.
De valkuil van vergelijkingskosten
Als je == zelf veel kost, bijvoorbeeld door grote arrays diepgaand te vergelijken, kan dat meer kosten dan de rendering die je probeert over te slaan. Vergelijk alleen goedkope, doorslaggevende velden.
static func == (a: Self, b: Self) -> Bool {
a.id == b.id && a.version == b.version // cheap fields
}Standaard gesynthetiseerde Equatable
Als alle opgeslagen eigenschappen Equatable zijn, kan Swift == synthetiseren. Closures en sommige typen zijn echter niet Equatable, dus heb je mogelijk een aangepaste implementatie nodig die ze negeert.
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) }
}De reikwijdte van @State beperken
Status die te hoog in de hiërarchie staat, rendert alles eronder opnieuw. Verplaats @State naar de kleinste weergave die de status beheert, zodat wijzigingen zo weinig mogelijk van de gebruikersinterface beïnvloeden.
// 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") }
}Status alleen optillen als die gedeeld wordt
Til status alleen op als meerdere weergaven die echt nodig hebben. Anders houdt lokale status het invloedsgebied van opnieuw renderen klein.
Subweergaven extraheren om updates te beperken
Als je een vaak veranderend onderdeel naar een eigen weergave verplaatst, blijft de herbeoordeling beperkt tot die weergave en blijven aangrenzende weergaven onaangeroerd.
struct LiveClock: View {
@State private var now = Date()
var body: some View { Text(now, style: .time) }
}Bindingen en reikwijdte
Een @Binding koppelt een onderliggende weergave aan de status van een bovenliggende weergave. Door een smalle binding door te geven, bijvoorbeeld één veld in plaats van het hele object, beperk je welke wijzigingen worden doorgegeven.
struct NameField: View {
@Binding var name: String // narrow binding
var body: some View { TextField("Name", text: $name) }
}Equatable combineren met reikwijdte
De beste resultaten krijg je door technieken te combineren: plaats status op een beperkte plek om aanleidingen te verminderen, en gebruik daarnaast Equatable om renderingen over te slaan die toch nog worden gestart.
Korte toets: Equatable-weergaven
Toets je begrip van Equatable-weergaven en de reikwijdte van status.
Samenvatting: Equatable-weergaven en statusreikwijdte
Door een weergave Equatable te maken, of .equatable() te gebruiken, kan SwiftUI ongewijzigde renderingen overslaan. Dat is vooral nuttig wanneer vergelijken veel goedkoper is dan renderen en je alleen doorslaggevende velden gebruikt.
Beperk @State tot de kleinste weergave die de status beheert, geef smalle bindingen door en verplaats snel veranderende onderdelen naar eigen weergaven. Door een beperkte statusreikwijdte met Equatable te combineren, krijg je zo min mogelijk en zo goedkoop mogelijke her-renderingen.
Leer Swift met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 122
- Lessen
- 409
Veelgestelde vragen
Is de les “Equatable views en @State-scope” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Swift Academy, waaronder “Equatable views en @State-scope”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Swift Academy bevat in totaal 4 lessen.
Wat leer ik in “Equatable views en @State-scope”?
Beperk de state om invalidatie te minimaliseren. Je oefent met Swift Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Swift Academy te beginnen?
Ervaring vooraf is niet nodig. Swift Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Equatable views en @State-scope”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Swift Academy?
Ja. Elke les over Swift Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- View-identiteit begrijpen
- Herberekening van body beperken
- Equatable views en @State-scope
- Profileren met het SwiftUI-instrument