🌊
【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