Swift Academy · Lektion

Structs jämfört med klasser, properties och init

Jämför värde- och referenssemantik. Använd lagrade och beräknade properties, property observers, initializers och class deinit.

Lektion 1 av 38 steg

Structs jämfört med klasser, properties och init är en gratis lektion i Swift Academy på CoddyKit. Detta är lektion 1 av 3. 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 3 lektioner.

Översikt

Swift har två huvudsakliga sammansatta typer: struct (värde) och class (referens).

  • Structs kopieras vid tilldelning
  • Classes delar referenser

Värde jämfört med referens

Structs kopierar värden, medan classes delar referenser. Om b ändras påverkas inte a, men d påverkar c.

struct Point { var x = 0, y = 0 }
class CPoint { var x = 0, y = 0 }

var a = Point(x: 1, y: 1)
var b = a          // copy
b.x = 9
print("struct a.x =", a.x, "b.x =", b.x) // 1, 9

let c = CPoint(); c.x = 1
let d = c          // same reference
d.x = 9
print("class c.x =", c.x, "d.x =", d.x) // 9, 9

Egenskaper

Lagrade egenskaper innehåller data, medan beräknade egenskaper härleder värden vid åtkomst.

struct Rectangle {
    var width: Double      // stored
    var height: Double     // stored
    var area: Double {     // computed
        return width * height
    }
}
let r = Rectangle(width: 3, height: 4)
print(r.area)  // 12

Observatörer

Använd willSet/didSet för att observera ändringar i lagrade egenskaper.

struct Counter {
    var value: Int = 0 {
        willSet { print("will set to", newValue) }
        didSet  { print("did set from", oldValue) }
    }
}
var cnt = Counter()
cnt.value = 5

Initierare

Structs får en memberwise initializer. Classes definierar init (designated) och kan lägga till convenience-initierare.

struct User {
    var name: String
    // memberwise init is synthesized: User(name:)
}
class Person {
    var name: String
    init(name: String) {    // designated
        self.name = name
    }
    convenience init() {    // convenience
        self.init(name: "Guest")
    }
}
let u = User(name: "Ada")
let p = Person()
print(u.name, p.name)

deinit

Endast classes har deinit, som anropas när instansen avallokeras (ARC).

class Temp {
    let id: Int
    init(id: Int) { self.id = id }
    deinit { print("Temp \\(id) deinit") }
}
do {
    let t = Temp(id: 1)
    print("using", t.id)
} // t goes out of scope and deinit may run

Fråga om struct och class

Snabbkontroll: Vilket påstående beskriver korrekt skillnaden mellan structs och classes?

Sammanfattning

Sammanfattning: Föredra struct för enkla data (värdesemantik). Använd class för delad identitet, arv och deinit. Lägg till lagrade eller beräknade egenskaper, observatörer och lämpliga initierare.

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 ”Structs jämfört med klasser, properties och init” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Swift Academy, inklusive ”Structs jämfört med klasser, properties och init”, 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 3 lektioner.

Vad lär jag mig i ”Structs jämfört med klasser, properties och init”?

Jämför värde- och referenssemantik. Använd lagrade och beräknade properties, property observers, initializers och class deinit. 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 1 av 3.

Hur lång tid tar lektionen ”Structs jämfört med klasser, properties och init”?

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. Structs jämfört med klasser, properties och init
  2. Lagrade och beräknade properties samt observers
  3. Initializers och deinit (klasser)
← Tillbaka till Swift Academy