Junior — Middle
Lehet-e olyan módszereket deklarálni Swift osztályokban, amelyek megváltoztatják az objektumok állapotát?
sobes.tech MI
Válasz az MI-től
Swiftben, azok a módszerek, amelyek megváltoztatják egy objektum állapotát, a mutating kulcsszóval vannak deklarálva, de ez csak szerkezetekre és enumerációkra (értéktípusokra) vonatkozik. Osztályok (referenciatípusok) esetén a módszerek alapértelmezés szerint módosíthatják az példány tulajdonságait további kulcsszó nélkül.
Tehát:
- Osztályokban, módszerek deklarálhatók, amelyek módosítják az objektum állapotát
mutatingnélkül. - Szerkezetekben és enumerációkban, a tulajdonságokat módosító módszereket
mutating-ként kell megjelölni.
Példa egy osztályra módosító módszerrel:
class Counter {
var count = 0
func increment() {
count += 1
}
}
let counter = Counter()
counter.increment()
print(counter.count) // 1
Példa szerkezetre mutating módszerrel:
struct Counter {
var count = 0
mutating func increment() {
count += 1
}
}
var counter = Counter()
counter.increment()
print(counter.count) // 1