Swift Academy · Lekcja

Słowo kluczowe mutating

Pisanie metod modyfikujących stan struktur i wyliczeń.

Lekcja 2 z 413 kroki

Słowo kluczowe mutating to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Metody domyślnie nie mogą modyfikować

Metoda instancji typu struct nie może zmieniać przechowywanych właściwości struktury, chyba że zostanie oznaczona jako mutating.

struct Counter {
    var value = 0
    mutating func increment() {
        value += 1
    }
}
var c = Counter()
c.increment()
print(c.value)

Dlaczego potrzebne jest mutating

Ponieważ struktury są typami wartości, kompilator wymaga jawnego zezwolenia na modyfikowanie, aby zmiana była jednoznaczna.

struct Bank {
    var balance = 0
    mutating func deposit(_ amount: Int) {
        balance += amount
    }
}
var b = Bank()
b.deposit(50)
print(b.balance)

Metody niemutujące

Metoda, która tylko odczytuje właściwości, nie potrzebuje słowa kluczowego 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 w enumie

Enumy również mogą mieć metody mutating, które przełączają instancję na inny przypadek.

enum Light {
    case on, off
    mutating func toggle() {
        self = (self == .on) ? .off : .on
    }
}
var l = Light.off
l.toggle()
print(l)

Nie można wywołać na let

Nie można wywołać metody mutating na stałej instancji (let); taka próba powoduje błąd kompilacji.

struct Counter {
    var value = 0
    mutating func bump() { value += 1 }
}
var c = Counter()
c.bump()
// let d = Counter(); d.bump() // error
print(c.value)

Zmiana wielu właściwości

Pojedyncza metoda mutating może jednocześnie zmienić kilka właściwości.

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 zwracające wartość

Metoda mutating może również zwracać wartość podczas zmiany stanu.

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)

Biblioteka standardowa używa mutating

Metody takie jak append w Array są metodami mutating, dlatego do ich wywołania potrzebna jest tablica zadeklarowana jako var.

var nums = [1, 2]
nums.append(3)
print(nums)

mutating i stan obliczany

Wewnątrz metody mutating można aktualizować stan pochodny, zachowując spójność niezmienników.

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)

Kolejność ma znaczenie

Instrukcje wewnątrz metody mutating są wykonywane od góry do dołu, więc późniejsze wiersze widzą wcześniejsze zmiany.

struct Accumulator {
    var total = 0
    mutating func process() {
        total += 1
        total *= 10
    }
}
var a = Accumulator()
a.process()
print(a.total)

Klasy nie potrzebują mutating

Typy referencyjne (class) mogą modyfikować właściwości bez tego słowa kluczowego, ponieważ nie są typami wartości.

class Box {
    var value = 0
    func bump() { value += 1 }
}
let box = Box()
box.bump()
print(box.value)

Szybkie sprawdzenie

Sprawdź działanie słowa kluczowego mutating.

Podsumowanie

Metodę instancji struktury lub enuma należy oznaczyć jako mutating, gdy zmienia przechowywane właściwości lub, w przypadku enumów, przełącza przypadek. Takich metod nie można wywoływać na instancjach let. Klasy, jako typy referencyjne, nigdy tego nie potrzebują.

struct C { var v = 0; mutating func inc() { v += 1 } }
var c = C()
c.inc()
print(c.v)
Bezpłatny start

Ucz się Swift dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
122
Lekcje
409

Często zadawane pytania

Czy lekcja „Słowo kluczowe mutating” jest bezpłatna?

Tak — pełny tekst „Słowo kluczowe mutating” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Słowo kluczowe mutating”?

Pisanie metod modyfikujących stan struktur i wyliczeń. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Słowo kluczowe mutating”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Typy wartości i niezmienność
  2. Słowo kluczowe mutating
  3. mutating i ponowne przypisanie self
  4. Alternatywy dla mutating
← Powrót do Swift Academy