Junior — Middle
Могат ли да се обявяват методи, които променят състоянието на обектите, в класове на Swift?
sobes.tech AI
Отговор от AI
В Swift методите, които променят състоянието на обекта, се декларират с ключовата дума mutating, но това важи само за структури и изброявания (стойностни типове). За класове (референтни типове) методите по подразбиране могат да променят свойствата на инстанцията без допълнителна ключова дума.
Тоест:
- В класове могат да се декларират методи, които променят състоянието на обекта без
mutating. - В структури и изброявания, методите, които променят свойства, трябва да бъдат маркирани като
mutating.
Пример на клас с променящ метод:
class Counter {
var count = 0
func increment() {
count += 1
}
}
let counter = Counter()
counter.increment()
print(counter.count) // 1
Пример на структура с mutating метод:
struct Counter {
var count = 0
mutating func increment() {
count += 1
}
}
var counter = Counter()
counter.increment()
print(counter.count) // 1