Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift枚举:是否对值更改执行代码?_Ios_Swift_Enums - Fatal编程技术网

Ios Swift枚举:是否对值更改执行代码?

Ios Swift枚举:是否对值更改执行代码?,ios,swift,enums,Ios,Swift,Enums,Swift枚举有很多奇妙之处,比如初始化,你可以编写一个变异函数等等 但是我想知道,当值改变时,你能让它运行一些代码吗 所以,当然,使用属性+枚举,您可以做到这一点。。。这太棒了 (注意,下面的瓦迪安给出了一个很好的完整示例。) 所以我的问题很简单,Swift enum是否有一个功能,可以让您在值更改时运行代码 或者,一句话,你必须使用属性/变异组合吗 但我想知道Swift中enum中是否有“值更改时运行代码”的概念 否。枚举是一种值类型。当值更改时,旧值将被完全销毁并替换为新值。如果您想要可变

Swift枚举有很多奇妙之处,比如初始化,你可以编写一个变异函数等等

但是我想知道,当值改变时,你能让它运行一些代码吗

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

(注意,下面的瓦迪安给出了一个很好的完整示例。)

所以我的问题很简单,Swift enum是否有一个功能,可以让您在值更改时运行代码

或者,一句话,你必须使用属性/变异组合吗

但我想知道Swift中enum中是否有“值更改时运行代码”的概念


否。枚举是一种值类型。当值更改时,旧值将被完全销毁并替换为新值。如果您想要可变状态,您应该使用类或可变结构,并使用属性
didSet

声明类型为
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
    }
  }
}

没错。谢谢你给出了一个完整正确的例子。正如我在问题中所说,“当然,使用属性+枚举,您可以做到这一点……这太棒了。”。我想知道当值改变时,enum是否有运行代码的语法:看起来答案只是“否”!事实上,答案是:不,对于这个方便的一个词的答案,我说一个方便的“谢谢”!:-)再次感谢您的精彩回答和代码参考。这将对许多人非常有用。(我在Aaron's上打了个勾,因为它是第一个,并且包含了一个很好的解释;很荒谬,你不能在上面发送“奖励积分”,再次感谢。)说Aaron。我很感激答案是“不”,谢谢。不过,请帮助我理解你的意思“enum是一种值类型”。当值更改时,旧值将被完全销毁,并替换为新值“……任何属性(可能确实是枚举)都会发生这种情况”包括值类型的普通情况。当然,当值类型发生变化时,运行一些代码是完全正常的。所以我不确定我是否遵循了“推理”的意思“在那儿。无论如何,谢谢!把它想象成一个
Int
。如果
var x=3
,您不会期望
Int
3
,在您稍后说
x=4
时能够做出反应。3被简单地销毁,取而代之的是4。从
Int
的角度来看,没有任何变化。类似地,当您更改枚举时,
Gate
可能会被销毁并替换为
Laps
。我想这很有意义。如果你把Int作为一个属性,那就完全是另一回事了。然后Int“3”就不必知道了。