Nøgleordet mutating
Skriv metoder, der ændrer tilstanden i structs og enums.
Nøgleordet mutating er en gratis Swift Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Swift Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Swift Academy-kurset indeholder 4 lektioner i alt.
Metoder kan som standard ikke ændre værdier
En instansmetode i en struct kan ikke ændre strukturens lagrede egenskaber, medmindre den er markeret med mutating.
struct Counter {
var value = 0
mutating func increment() {
value += 1
}
}
var c = Counter()
c.increment()
print(c.value)Hvorfor mutating er nødvendigt
Da structs er værdityper, kræver compileren, at du aktivt tillader ændringer, så ændringen er tydelig.
struct Bank {
var balance = 0
mutating func deposit(_ amount: Int) {
balance += amount
}
}
var b = Bank()
b.deposit(50)
print(b.balance)Ikke-mutating metoder
En metode, der kun læser egenskaber, har ikke brug for mutating.
struct Rectangle {
var width = 0
var height = 0
func area() -> Int {
return width * height
}
}
let r = Rectangle(width: 3, height: 4)
print(r.area())mutating på enum
Enums kan også have mutating-metoder, der skifter instansen til en anden case.
enum Light {
case on, off
mutating func toggle() {
self = (self == .on) ? .off : .on
}
}
var l = Light.off
l.toggle()
print(l)Kan ikke kaldes på let
Du kan ikke kalde en mutating-metode på en konstant (let)-instans; det giver en kompileringsfejl.
struct Counter {
var value = 0
mutating func bump() { value += 1 }
}
var c = Counter()
c.bump()
// let d = Counter(); d.bump() // error
print(c.value)Ændring af flere egenskaber
En enkelt mutating-metode kan ændre flere egenskaber på én gang.
struct Player {
var x = 0
var y = 0
mutating func move(dx: Int, dy: Int) {
x += dx
y += dy
}
}
var p = Player()
p.move(dx: 3, dy: 5)
print(p.x, p.y)mutating, der returnerer en værdi
En mutating-metode kan også returnere en værdi, mens den ændrer tilstanden.
struct Stack {
var items: [Int] = []
mutating func pop() -> Int? {
return items.popLast()
}
}
var s = Stack(items: [1, 2, 3])
print(s.pop() ?? -1)
print(s.items)Standardbiblioteket bruger mutating
Metoder som append på Array er mutating, og derfor skal du bruge et var-array for at kalde dem.
var nums = [1, 2]
nums.append(3)
print(nums)mutating og afledt tilstand
Du kan opdatere afledt tilstand i en mutating-metode og dermed holde invarianterne konsistente.
struct Wallet {
var coins = 0
var label = "empty"
mutating func add(_ n: Int) {
coins += n
label = coins > 0 ? "has coins" : "empty"
}
}
var w = Wallet()
w.add(5)
print(w.coins, w.label)Rækkefølgen betyder noget
Sætningerne i en mutating-metode køres fra top til bund, så senere linjer kan se tidligere ændringer.
struct Accumulator {
var total = 0
mutating func process() {
total += 1
total *= 10
}
}
var a = Accumulator()
a.process()
print(a.total)Klasser behøver ikke mutating
Referencetyper (class) kan ændre egenskaber uden nøgleordet, fordi de ikke er værdityper.
class Box {
var value = 0
func bump() { value += 1 }
}
let box = Box()
box.bump()
print(box.value)Hurtig kontrol
Afprøv nøgleordet mutating.
Opsamling
Markér en instansmetode på en struct eller enum med mutating, når den ændrer lagrede egenskaber eller, for enums, skifter case. Sådanne metoder kan ikke kaldes på let-instanser. Klasser er referencetyper og har derfor aldrig brug for det.
struct C { var v = 0; mutating func inc() { v += 1 } }
var c = C()
c.inc()
print(c.v)Lær Swift med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 122
- Lektioner
- 409
Ofte stillede spørgsmål
Er lektionen “Nøgleordet mutating” gratis?
Ja — alle 3 lektioner i læringssporet Swift Academy, inklusive “Nøgleordet mutating”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Swift Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Nøgleordet mutating”?
Skriv metoder, der ændrer tilstanden i structs og enums. Du øver dig i Swift Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Swift Academy?
Der kræves ingen tidligere erfaring. Swift Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Nøgleordet mutating”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Swift Academy-lektion?
Ja. Alle Swift Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Værdityper og immutabilitet
- Nøgleordet mutating
- Mutating og self-tilordning
- Ikke-muterende alternativer