我正在阅读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()
不起作用,我想知道是否有办法改变枚举的关联值,以及如何?
答案 0 :(得分:30)
您最直接的问题是,当您应该使用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)
}