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