Swift Academy · Les

Equatable views en @State-scope

Beperk de state om invalidatie te minimaliseren.

Les 3 van 413 stappen

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.

Gratis beginnen

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

  1. View-identiteit begrijpen
  2. Herberekening van body beperken
  3. Equatable views en @State-scope
  4. Profileren met het SwiftUI-instrument
← Terug naar Swift Academy