SwiftUI | Left side of mutating operator isn’t mutable: ‘self’ is immutableの対処方法

変数

SwiftUIでstructの変数を変更しようとした時に発生するLeft side of mutating operator isn’t mutable: ‘self’ is immutableの対処方法を説明する。

結論

変更する変数に@Stateを付ける。

具体例

ヨシヒコを攻撃するとHPが減るというアプリ。ヨシヒコのHPがStructの変数。

OKコード例

ヨシヒコのHPを入れる変数に@Stateを付ける。

import SwiftUI

struct ContentView: View {
    @State var Yoshihiko_HP: Int = 100 // ここ
    var body: some View {
        Text("ヨシヒコのHP:" + String(Yoshihiko_HP))
        Button("ヨシヒコをこうげき") {
            Yoshihiko_HP -= 10
        }
        .buttonStyle(.borderedProminent)
    }
}

NGコード例

変数に@Stateを付けないとNG。

import SwiftUI

struct ContentView: View {
    var Yoshihiko_HP: Int = 100  // ここ
    var body: some View {
        Text("ヨシヒコのHP:" + String(Yoshihiko_HP))
        Button("ヨシヒコをこうげき") {
            Yoshihiko_HP -= 10
        }
        .buttonStyle(.borderedProminent)
    }
}

Left side of mutating operator isn’t mutable: ‘self’ is immutableというエラーが出る。

環境

Xcode 13.3, Swift 5.6

まとめ

SwiftUIでstructの変数を変更しようとした時に発生するLeft side of mutating operator isn’t mutable: ‘self’ is immutableの対処方法を説明した。

コメント

タイトルとURLをコピーしました