StateMachine
用 Swift 实现的状态机。
安装
CocoaPods
pod 'JCStateMachine', '~> 1.0.0'
Carthage
carthage 'jbaptistecastro/StateMachine' "1.0.0"
类
状态
状态只需要一个名称。
创建状态对象
let myState = State("MyState")
转换
转换需要名称、一个“from”状态和一个“to”状态。
创建转换对象
let fromState = State("FromState")
let toState = State("ToState")
let myTransition = Transition("MyTransition", from: fromState, to: toState)
生命周期事件
在特定转换之前
beforeTransition(transition)
离开特定状态时
leaveState(state)
进入特定状态时
onState(state)
进入特定转换时
onTransition(transition)
状态机
状态机接收一个初始状态和一个转换数组和。”
创建状态机对象
let stateA = State("StateA")
let stateB = State("StateB")
let transitionA = Transition("TransitionA", from: stateA, to: stateB)
let transitionB = Transition("TransitionB", from: stateB, to: stateA)
let stateMachine = StateMachine(initialState: stateA, transitions: [transitionA, transitionB]
触发转换
do {
stateMachine.fire(transition: transitionB, userInfo: nil)
} catch TransitionError.unknown {
print("Transition unknown)
} catch TransitionError.notAllowed {
print("Transition not allowed")
}
监听生命周期事件
可以在特定队列上观察一个事件,并为“userInfo”字典触发。
stateMachine.on(.onState(stateB), queue: observeQueue) { (userInfo) in
}
辅助函数
比较状态与当前状态
let isCurrent = stateMachine.isCurrent(state: myState)
如果可以触发转换
let canFire = stateMachine.canFire(transition: myTransition)
从当前状态获取允许的转换
let allowedTransitions = stateMachine.allowedTransitions()
从特定名称获取状态
let stateA = stateMachine.state(name: "stateA")
获取已注册的状态
let states = stateMachine.allStates()
从特定名称获取过渡
let transitionA = stateMachine.transition(name: "transitionA")
获取已注册过渡
let transitions = stateMachine.allTransitions()
Objective-C 兼容性
实际上,StateMachine 不支持 Objective-C,并且没有计划支持。