我可以更改枚举的关联值吗?
我正在阅读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()
将无法正常工作,我想知道是否有一种方法可以更改枚举的关联值,以及如何更改?
回答:
最直接的问题是,let
当您应该使用声明不可变变量(用声明)时,您尝试更改其值var
。但是,由于您的name
变量包含关联值的副本,因此,这不会解决此特定问题,但是通常这是您需要注意的。
如果要解决此问题,则需要将该adjust()
函数声明为muting函数,并根据具体情况将其自身重新分配为一个新的枚举值,并具有一个由旧值和新值组成的关联值。例如:
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)
}
以上是 我可以更改枚举的关联值吗? 的全部内容, 来源链接: utcz.com/qa/397817.html