Swift ツアー ドキュメントを読んでいるのですが、問題に直面しています。コードは次のとおりです。
enum SimpleEnum {
case big(String)
case small(String)
case same(String)
func adjust() {
switch self {
case let .big(name):
name += "not"
case let .small(name):
name += "not"
case let .same(name):
name += "not"
}
}
}
関数がadjust()
動作しません。列挙型の関連値を変更する方法があるかどうか、またその方法はあるのでしょうか?
ベストアンサー1
let
最も差し迫った問題は、 で宣言すべき不変変数 ( で宣言) の値を変更しようとしていることですvar
。ただし、変数には関連付けられている値のコピーが含まれているため、この特定の問題は解決されませんname
が、一般的にこれは知っておく必要があることです。
これを解決するには、adjust()
関数を変更関数として宣言し、ケースごとに self を再割り当てして、古い値と新しい値から構成される関連値を持つ新しい列挙値にする必要があります。例:
enum SimpleEnum{
case big(String)
case small(String)
case same(String)
mutating func adjust() {
switch self{
case let .big(name):
self = .big(name + "not")
case let .small(name):
self = .small(name + "not")
case let .same(name):
self = .same(name + "not")
}
}
}
var test = SimpleEnum.big("initial")
test.adjust()
switch test {
case let .big(name):
print(name) // prints "initialnot"
case let .small(name):
print(name)
case let .same(name):
print(name)
}