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.
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, 9Egenskaper
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) // 12Observatö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 = 5Initierare
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 runFrå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.
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
- Structs jämfört med klasser, properties och init
- Lagrade och beräknade properties samt observers
- Initializers och deinit (klasser)