Sobes.tech
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 mutating né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