JCStateMachine 1.0.0

JCStateMachine 1.0.0

Jean-Baptiste Castro 维护。



Build Status   CocoaPod platform   CocoaPod version   Carthage compatible

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,并且没有计划支持。