我正在阅读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"
}
}
}
Run Code Online (Sandbox Code Playgroud)
该函数adjust()
不起作用,我想知道是否有办法改变枚举的关联值,以及如何?
Mic*_*lum 33
您最直接的问题是,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)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5513 次 |
最近记录: |