Swift Academy · Lektion

Lagrade egenskaper och egenskapsobservatörer

Använd observatörerna didSet och willSet för att reagera på egenskapsändringar.

Lektion 2 av 412 steg

Lagrade egenskaper och egenskapsobservatörer är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Swift Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Swift Academy innehåller totalt 4 lektioner.

Välkommen

Lagrade egenskaper innehåller värden inuti en struct eller klass. Egenskapsobservatörerna — `willSet` och `didSet` — låter dig reagera när värdet för en lagrad egenskap ändras.

Lagrade egenskaper

```swift struct Counter { var count: Int = 0 // stored, mutable let name: String // stored, immutable } ``` Varje värde du tilldelar med `let` eller `var` inuti en typ är en lagrad egenskap.

didSet-observatör

```swift struct Gauge { var level: Int = 0 { didSet { print("Changed from \(oldValue) to \(level)") } } } var g = Gauge() g.level = 5 // "Changed from 0 to 5" ``` `oldValue` är det föregående värdet som tillhandahålls automatiskt.

willSet-observatör

```swift struct Slider { var value: Double = 0.5 { willSet { print("About to change to \(newValue)") } } } ``` `newValue` är det inkommande värdet som tillhandahålls automatiskt. `willSet` utlöses före tilldelningen.

Båda observatörerna tillsammans

```swift var temperature: Double = 20 { willSet { print("Will become \(newValue)") } didSet { print("Was \(oldValue)") } } temperature = 25 // Will become 25.0 // Was 20.0 ```

Begränsa värden med didSet

```swift var volume: Int = 50 { didSet { if volume > 100 { volume = 100 } if volume < 0 { volume = 0 } } } volume = 150 // clamped to 100 ``` Ett tydligt mönster för att automatiskt upprätthålla invarianter.

Observatörer på underklasser

Egenskapsobservatörer fungerar även på ärvda egenskaper: ```swift class Base { var x: Int = 0 } class Child: Base { override var x: Int { didSet { print("x changed to \(x)") } } } ```

Observatörer utlöses inte i init

```swift struct Model { var value: Int = 0 { didSet { print("changed") } } init(v: Int) { self.value = v } // does NOT trigger didSet } ``` Observatörer utlöses inte under den första tilldelningen i `init`.

Lagrad jämfört med beräknad — snabb åtskillnad

• Lagrad: `var x: Int = 0` — har faktisk lagring • Beräknad: `var doubled: Int { x * 2 }` — härleds vid åtkomst och har ingen lagring • Observatör: kopplad till en lagrad egenskap — reagerar på ändringar Observatörer kan inte läggas till på beräknade egenskaper (de har redan `get`/`set`).

Prestandaanteckning

Egenskapsobservatörer medför kostnaden av ett funktionsanrop vid varje skrivning. För skrivningar med hög frekvens (t.ex. fysik i en spellooop) kan du överväga att använda en vanlig lagrad egenskap och anropa uppdateringslogiken explicit för bättre prestanda.

Snabb kontroll

Vilken egenskapsobservatör ger åtkomst till det **föregående** värdet?

Sammanfattning

Viktiga lärdomar: • Lagrade egenskaper innehåller värden direkt • `willSet` utlöses innan det nya värdet lagras; `newValue` tillhandahålls • `didSet` utlöses efteråt; `oldValue` tillhandahålls • Observatörer utlöses inte under `init` • Utmärkt för sidoeffekter som gränssnittsuppdateringar, loggning och validering Nästa: beräknade egenskaper.
Gratis att börja

Lär dig Swift med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
122
Lektioner
409

Vanliga frågor

Är lektionen ”Lagrade egenskaper och egenskapsobservatörer” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”Lagrade egenskaper och egenskapsobservatörer”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Swift Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Lagrade egenskaper och egenskapsobservatörer”?

Använd observatörerna didSet och willSet för att reagera på egenskapsändringar. Ni övar på Swift Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Swift Academy?

Du behöver inga förkunskaper. Utbildningen i Swift Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Lagrade egenskaper och egenskapsobservatörer”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Swift Academy-lektionen?

Ja. Varje Swift Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Medlemsvisa initierare och anpassade initierare
  2. Lagrade egenskaper och egenskapsobservatörer
  3. Beräknade egenskaper i strukturer
  4. Muterande metoder och copy-on-write-semantik
← Tillbaka till Swift Academy