I S*_*h I 0 if-statement swift
我脑子里似乎无法解决的简单问题。我有一个变量,该变量将被更新并按顺序递增,即0、1、2、3、4 ..等等,以便清楚。我正在尝试实现一个条件,当数字是1和2时发出蜂鸣声,而3和4则这样做,这应该交替出现。让我向您展示使用代码。
func doSomething(number : Int) {
//number is increment sequentially: 0, 1, 2, 3, 4...
let number : Int = number
if number is 1, 2, 5, 6, 9, 10... {
//play a sound
} else if number is 3, 4, 7, 8, 11, 12... {
//vibrate
}
}
Run Code Online (Sandbox Code Playgroud)
我关心的不是if语句内部发生什么,而是if语句条件下的逻辑。
这是一个总的选择:不要增加数字。不需要数字。他们是一条红鲱鱼。您想要的是每次我们需要新的动作时执行某个“下一个”动作。因此,让我们编写一个状态机,其中每个连续的状态变化都按照您的描述进行操作。
struct StateMachine {
enum TickTock {
case tick
case tock
}
private var tickTock = TickTock.tock
private var alternator = false
mutating func nextState() {
self.alternator = !self.alternator
if self.alternator {
self.tickTock = self.tickTock == .tick ? .tock : .tick
}
print(self.tickTock)
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您唯一要做的就是手握一个StateMachine实例,并在nextState每次需要执行新操作时调用它。这是一个测试及其输出(不要被循环所误导;这个故事中没有实际数字,这只是一个测试床):
var machine = StateMachine()
for _ in 0..<20 {
machine.nextState()
}
/*
tick
tick
tock
tock
tick
tick
tock
tock
tick
tick
tock
tock
tick
tick
tock
tock
tick
tick
tock
tock
*/
Run Code Online (Sandbox Code Playgroud)
如果每次我们打印“滴答声”时您发出声音,而每次我们打印“滴答声”时都振动,那么您将完全按照规格要求进行操作。
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |