🌊

【Swift】mutatingが付けられる理由

2022/07/05に公開
struct Person {
    var name: String
    
    mutating func makeAnonymous() {
        name = "Anonymous"
    }
}

var person = Person(name: "Ed")
person.makeAnonymous()

mutatingは、以下のように二つのvar宣告ではないと成立されません

  • structの内のプロパティ宣告(var name
  • structイニシャライザの時の変数宣告(var person

namepersonのどちらかletで宣告した場合、mutatingはエラーになります)

mutatingをつける理由

理由は、Swiftはイニシャライザの時がletvarを使うかのを分からないです
varの場合だったらプロパティーは変更されます、letの場合だったら変更されません
安全性のために、一旦素のfunctionからプロパティー変更するのを禁止とし
もし開発者が二つのvarを使っていることを確認したから、functionの前にmutatingをつけて謹慎にプロパティーを変更しましょう

Discussion