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
- View-Identität verstehen
- Neuberechnung von Body minimieren
- Equatable Views und @State-Sichtbarkeit
- Profiling mit dem SwiftUI-Instrument