我可以更改枚举的关联值吗?

我正在阅读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

回到顶部