修改枚举关联值

时间:2016-04-21 06:50:57

标签: swift enums

是否可以在Swift中修改enum的相关值?我这样做,但每次我必须覆盖整个对象。它并不优雅。

    switch option {
        case .Days(let choices):
            var newChoices = choices

            ...

            self.days = Option.Days(newChoices)

        default:
            break
    }

1 个答案:

答案 0 :(得分:1)

不允许修改枚举大小写的关联值,但是你可以使用带引用语义的类型(即 class )在容器中附加一个可变值,如下所示:

class Box<T>: CustomDebugStringConvertible {
    var value: T
    var debugDescription: String { return "\(value)" }
    init(_ value: T) { self.value = value }
}

enum X {
    case A(Box<Int>), B(Box<String>)
}

let x = X.A(Box(1))
let y = X.B(Box("xxx"))

print(x, y) // A(1) B(xxx)

if case let X.A(box) = x {
    box.value = 2
}

if case let X.B(box) = y {
    box.value = "yyy"
}

print(x, y) // A(2) B(yyy)

虽然,但对我来说看起来并不优雅。