Sobes.tech
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