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

wj2*_*061 14 enums swift

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