0Pricing
Swift Academy · Lektion

Equatable Views und @State-Sichtbarkeit

Begrenzen Sie den State, um Invalidierungen zu reduzieren.

Equatable Views und @State-Sichtbarkeit ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Gleichheit kann Arbeit überspringen

Wenn SwiftUI nachweisen kann, dass sich die Eingaben einer View nicht geändert haben, kann es deren erneutes Rendern überspringen. Wenn Sie eine View Equatable machen, geben Sie SwiftUI eine präzise Entscheidungsgrundlage.

Konformität zu Equatable herstellen

Stellen Sie die Konformität Ihrer View zu Equatable her, damit SwiftUI alte und neue Werte vergleicht. Sind sie gleich, überspringt SwiftUI die Auswertung von 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

Sie können jede Equatable-View auch mit .equatable() umschließen, um das Überspringen auf Basis eines Vergleichs anzufordern, ohne die Aufrufstellen des Typs überall ändern zu müssen.

Badge(count: total)
    .equatable()

Wann Equatable hilft

Equatable ist besonders nützlich für Views mit kostengünstig vergleichbaren Eingaben, deren body jedoch aufwendig ist. Die Vergleichskosten müssen deutlich niedriger sein als die Renderkosten, damit sich das lohnt.

Die Falle der Vergleichskosten

Wenn Ihr == selbst aufwendig ist, etwa beim tiefen Vergleich großer Arrays, kann der Vergleich mehr kosten als das Rendern, das Sie überspringen möchten. Vergleichen Sie nur günstige, aussagekräftige Felder.

static func == (a: Self, b: Self) -> Bool {
    a.id == b.id && a.version == b.version // cheap fields
}

Automatisch erzeugtes Equatable

Wenn alle gespeicherten Eigenschaften Equatable sind, kann Swift == automatisch erzeugen. Closures und einige Typen sind jedoch nicht Equatable. Daher benötigen Sie möglicherweise eine eigene Implementierung, die diese ignoriert.

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) }
}

Den @State-Bereich eingrenzen

Zu weit oben platzierter State führt dazu, dass alles darunter erneut gerendert wird. Verschieben Sie @State in die kleinste View, die ihn besitzt, damit Änderungen möglichst wenige UI-Elemente betreffen.

// 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") }
}

State nur bei gemeinsamer Nutzung nach oben verlagern

Verlagern Sie State nur dann nach oben, wenn ihn tatsächlich mehrere Views benötigen. Andernfalls hält lokaler State den Bereich der erneuten Darstellung klein.

Subviews extrahieren, um Updates zu begrenzen

Wenn Sie einen häufig veränderten Teil in eine eigene View extrahieren, beschränken Sie die erneute Auswertung auf diese View, während benachbarte Views unverändert bleiben.

struct LiveClock: View {
    @State private var now = Date()
    var body: some View { Text(now, style: .time) }
}

Bindings und Gültigkeitsbereich

Ein @Binding verbindet ein untergeordnetes Element mit dem State eines übergeordneten Elements. Wenn Sie ein begrenztes Binding, also ein einzelnes Feld, statt des gesamten Objekts übergeben, legen Sie fest, welche Änderungen weitergegeben werden.

struct NameField: View {
    @Binding var name: String // narrow binding
    var body: some View { TextField("Name", text: $name) }
}

Equatable mit begrenztem Gültigkeitsbereich kombinieren

Die besten Ergebnisse erzielen Sie durch die Kombination mehrerer Techniken: Platzieren Sie State in einem begrenzten Bereich, um Auslöser zu reduzieren, und verwenden Sie zusätzlich Equatable, um dennoch ausgelöste erneute Darstellungen zu überspringen.

Schnelltest: Equatable-Views

Testen Sie Ihr Verständnis von Equatable-Views und dem Gültigkeitsbereich von State.

Zusammenfassung: Equatable-Views und State-Bereich

Wenn Sie eine View Equatable machen oder .equatable() verwenden, kann SwiftUI unveränderte erneute Darstellungen überspringen. Das lohnt sich, wenn der Vergleich deutlich günstiger ist als das Rendern und nur aussagekräftige Felder verglichen werden.

Begrenzen Sie @State auf die kleinste View, die den State besitzt, übergeben Sie begrenzte Bindings und extrahieren Sie veränderliche Teile in eigene Views. Die Kombination aus einem engen State-Bereich und Equatable führt zu möglichst wenigen und möglichst günstigen erneuten Darstellungen.

Häufig gestellte Fragen

Ist die Lektion „Equatable Views und @State-Sichtbarkeit“ kostenlos?

Ja — der vollständige Text von „Equatable Views und @State-Sichtbarkeit“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Equatable Views und @State-Sichtbarkeit“?

Begrenzen Sie den State, um Invalidierungen zu reduzieren. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Equatable Views und @State-Sichtbarkeit“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. View-Identität verstehen
  2. Neuberechnung von Body minimieren
  3. Equatable Views und @State-Sichtbarkeit
  4. Profiling mit dem SwiftUI-Instrument
← Zurück zu Swift Academy