是否可以在Swift中修改enum的相关值?我这样做,但每次我必须覆盖整个对象。它并不优雅。
switch option {
case .Days(let choices):
var newChoices = choices
...
self.days = Option.Days(newChoices)
default:
break
}
答案 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)
虽然,但对我来说看起来并不优雅。