Swift枚举:在价值变化上执行代码?

时间:2016-06-07 13:56:30

标签: ios swift enums

Swift枚举有各种奇迹,比如初始化,你可以写一个变异函数等等。

但是我想知道,当你的价值发生变化时,你能简单地拥有它吗运行一些代码 ??

所以,当然,使用属性+枚举,你可以做到这一点......这太棒了。

(注意,下面的vadian为这样做提供了一个很好的完整示例。)

所以我的问题很简单,Swift枚举是否有一项功能可以让你在值改变时运行代码

或者,总之,您是否必须使用属性/变异组合?

2 个答案:

答案 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
    }
  }
}