红石有一个状态机。
Swift 4,iOS 8
(Swift 3,请使用版本0.3.0)
如果你的房间有灯,你可以打开或关闭它。如果你想剪断电线,它会损坏。
我们可以定义状态和转换来描述状态机
import Redstone
class Lights {
enum State: Int {
case off
case on
case broken
}
enum Transition: Int {
case turn
case cut
}
lazy var stateMachine: StateMachine<State, Transition> = {
let stateMachine = StateMachine<State, Transition>()
stateMachine.add(state: .off) {
print("Lights off")
}
stateMachine.add(state: .on) {
print("Lights on")
}
stateMachine.add(state: .broken) {
print("Lights broken")
}
stateMachine.add(transition: .turn, fromState: .off, toState: .on)
stateMachine.add(transition: .turn, fromState: .on, toState: .off)
stateMachine.add(transition: .cut, fromStates: [.on, .off], toState: .broken)
return stateMachine
}()
}
我们创建了一个灯,将其初始状态设置为关闭。
let lights = Lights()
lights.stateMachine.initialState = .off
现在你可以从关闭切换到打开,或者从打开切换到关闭
lights.stateMachine.fire(transition: .turn)
或者剪断电线
lights.stateMachine.fire(transition: .cut)
它将无法再次打开。
如果您愿意,可以运行演示来感受一下。
NIX @nixzhu
红石受MIT许可证约束。有关更多信息,请参阅LICENSE文件。