🌊
【Swift】mutatingが付けられる理由
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)
(nameとpersonのどちらかletで宣告した場合、mutatingはエラーになります)
mutatingをつける理由
理由は、Swiftはイニシャライザの時がletかvarを使うかのを分からないです
varの場合だったらプロパティーは変更されます、letの場合だったら変更されません
安全性のために、一旦素のfunctionからプロパティー変更するのを禁止とし
もし開発者が二つのvarを使っていることを確認したから、functionの前にmutatingをつけて謹慎にプロパティーを変更しましょう
Discussion