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
,我不知道操场上发生了什么我怀疑问题仍然存在。
我要去哪里错了?
答案 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()
时,它将移至关闭状态。