Swift枚举有各种奇迹,比如初始化,你可以写一个变异函数等等。
但是我想知道,当你的价值发生变化时,你能简单地拥有它吗运行一些代码 ??
所以,当然,使用属性+枚举,你可以做到这一点......这太棒了。
(注意,下面的vadian为这样做提供了一个很好的完整示例。)
所以我的问题很简单,Swift枚举是否有一项功能可以让你在值改变时运行代码?
或者,总之,您是否必须使用属性/变异组合?
答案 0 :(得分:6)
但是我想知道在Swift的枚举中是否存在“在值发生变化时运行代码”的概念。
没有。枚举是值类型。当值更改时,旧值将被完全销毁并替换为新值。如果你想要可变状态,你应该使用类或可变结构,并didSet
使用属性。
答案 1 :(得分:0)
声明类型为RaceState
的实例变量/属性,并更改观察者didSet
中的值
enum RaceState { case Gate, Laps, Pits }
class Foo {
var raceState : RaceState {
didSet {
if oldValue != raceState {
switchState(raceState)
}
}
}
init(state : RaceState) {
self.raceState = state
switchState(state)
}
func switchState(state : RaceState)
{
switch state {
case .Gate:
engine.sound = false
lights.hidden = true
score.hidden = true
start.hidden = false
case .Laps:
engine.sound = true
lights.hidden = true
score.hidden = false
start.hidden = false
case .Pits:
engine.sound = true
lights.hidden = false
score.hidden = true
start.hidden = false
}
}
}