枚举切换不同的情况

时间:2018-09-27 10:05:51

标签: swift

enum TriStateSwitch {

    case off, low, high

    mutating func next() {
        switch self {
        case .off:
            self = .low
        case .low:
            self = .high
        case .high:
            self = .off
        }
    }
}

var ovenLight = TriStateSwitch.low
ovenLight.next()
ovenLight.next()

当我第一次尝试运行该实例时,它会给我high,而当我第二次运行相同的实例时,它会向我显示low,我不知道操场上发生了什么我怀疑问题仍然存在。

我要去哪里错了?

2 个答案:

答案 0 :(得分:0)

是的,您的代码正在更改同一实例,并且您的代码按顺序对您的实例进行操作。我看看是否可以解释:

在这里我们可以看到您代码的每个部分

1。

var ovenLight = TriStateSwitch.low

所以我们是.low

2。

ovenLight.next()

如果我们为.low(以前是),则会遇到这种情况:

case .low:
    self = .high

所以我们很高

3。

ovenLight.next()

如果我们是.high(过去是),我们会遇到这种情况:

case .high:
    self = .off

所以我们是.off

这有意义吗?

答案 1 :(得分:0)

如果添加一些打印语句,您会发现枚举的行为与预期完全相同:

var ovenLight = TriStateSwitch.low
print("1. ovenLight = \(ovenLight)")

ovenLight.next()
print("2. ovenLight = \(ovenLight)")

ovenLight.next()
print("3. ovenLight = \(ovenLight)")

输出:

1. ovenLight = low
2. ovenLight = high
3. ovenLight = off

它是从低位开始的,这就是它的创建方式。您打next()的第一时间,它变高了。下次您致电next()时,它将移至关闭状态。