【Swift】mutatingキーワードについて

【Swift】mutatingキーワードについて iOS

StructやEnumのような値型では、自身の値を変更する場合には、メソッドの宣言にmutatingキーワードをつける必要があります。

mutatingキーワードが指定されたメソッドを実行してインスタンスの値を変更すると、インスタンスが格納されている変数への暗黙的な再代入が行われます。

mutatingキーワードが指定されたメソッドの呼び出しは再代入として扱われるので、定数に格納された値型のインスタンスに対しては実行できずにコンパイルエラーとなります。

// 以下のコードは「Swift実践入門」6.2からの引用です

extension Int {
    mutating func increment() {
        self += 1
    }
}

var a = 1  // 1
a.increment()  // 2(aに再代入が行われている)

let b = 1
b.increment()  // bに再代入できないためコンパイルエラー

Structの場合は、ストアドプロパティを変更する場合にもmutatingキーワードが必要になります。

struct SampleStruct {
    var count: Int

    init(count: Int) {
        self.count = count
    }

    mutating func countUP() {
        self.count += 1
    }
}

// letで宣言するとコンパイルエラーとなる
var sampleStruct = SampleStruct(count: 1)
sampleStruct.countUP()
sampleStruct.count  // 2

参考記事