如果为Statement,则条件满足特定数字,变量递增

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语句条件下的逻辑。

mat*_*att 5

这是一个总的选择:不要增加数字。不需要数字。他们是一条红鲱鱼。您想要的是每次我们需要新的动作时执行某个“下一个”动作。因此,让我们编写一个状态机,其中每个连续的状态变化都按照您的描述进行操作。

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)

如果每次我们打印“滴答声”时您发出声音,而每次我们打印“滴答声”时都振动,那么您将完全按照规格要求进行操作。