Sobes.tech
Junior — Middle

Ar galima Swift kalboje klasėse deklaruoti metodus, kurie keičia objektų būseną?

sobes.tech AI

Atsakymas iš AI

Swift'e, metodai, kurie keičia objekto būseną, deklaruojami su raktiniu žodžiu mutating, tačiau tai taikoma tik struktūroms ir enumeracijoms (reikšmės tipams). Klasės (nuorodų tipai) pagal numatytuosius nustatymus gali keisti instancijos savybes be papildomo raktinio žodžio.

Tai reiškia:

  • Klasėse galima deklaruoti metodus, kurie keičia objekto būseną, be mutating.
  • Struktūrose ir enumeracijose, metodai, keičiantys savybes, turi būti pažymėti kaip mutating.

Pavyzdys klasės su keičiančiu metodu:

class Counter {
    var count = 0
    func increment() {
        count += 1
    }
}

let counter = Counter()
counter.increment()
print(counter.count) // 1

Pavyzdys struktūros su mutating metodu:

struct Counter {
    var count = 0
    mutating func increment() {
        count += 1
    }
}

var counter = Counter()
counter.increment()
print(counter.count) // 1