用 Swift 编写的简单状态机
要运行示例项目,克隆仓库,然后运行
NBStateMachine 可以通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile:
pod "NBStateMachine"
//states
let stateLyingDown = State(name: "Lying Down")
let stateStanding = State(name: "Standing")
let stateSitting = State(name: "Sitting Down")
let stateRunning = State(name: "Running")
//events
let eventSitDown = Event(eventName: "Sit Down", sourceStates: [stateStanding, stateLyingDown], destinationState: stateSitting)
eventSitDown.willFireEvent = { (event:Event) -> Bool in
print("I'm about to sit down")
return true
}
eventSitDown.didFireEvent = { (event:Event) -> Void in
print("I'm am siting down")
}
let eventStandUp = Event(eventName: "Stand Up", sourceStates: [stateSitting, stateRunning], destinationState: stateStanding)
eventStandUp.willFireEvent = { (event:Event) -> Bool in
print("I'm about to Stand")
return true
}
eventStandUp.didFireEvent = { (event:Event) -> Void in
print("I'm am Standing")
}
let eventStartRunning = Event(eventName: "Start Running", sourceStates: [stateStanding, stateRunning], destinationState: stateRunning)
eventStartRunning.willFireEvent = { (event:Event) -> Bool in
print("I'm about to Start running")
return true
}
eventStartRunning.didFireEvent = { (event:Event) -> Void in
print("I'm am Running")
}
//initiate NBStateMachine
let machine = NBStateMachine(initialState: stateLyingDown)
machine.addStates([stateSitting, stateRunning, stateStanding])
machine.addEvents([eventSitDown, eventStandUp, eventStartRunning])
//fire an event
let transition = machine.fireEvent(eventSitDown) //try also eventStandUp, eventStartRunning
print("transition from State:\(transition.sourceState.name) to State:\(transition.destinationState.name) was successful :\(transition.successful) with error:\(transition.error?.description)")
请随意就想法、问题或拉取请求进行合作。
Noam Bar-on, https://www.linkedin.com/in/noambaron
MIT 许可证 (MIT)
版权所有 © 2015 Noam Bar-on。
特此许可,免收费用,任何获得此软件及其相关文档文件(“软件”)副本的人(“任何人”),可以在不受任何限制的情况下处理软件,包括但不仅限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许向获得软件的人提供如此软件以供其这样做,但受以下条件约束:
上述版权声明和本许可声明应包含在所有副本或软件的主要部分中。
本软件“按原样”提供,不提供任何形式的保证,无论明示或默示,包括但不限于适销性、特定目的适用性和非侵权性保证。在任何情况下,作者或著作权所有者不对任何索赔、损害或其他责任(无论基于合同、侵权或其他原因)承担任何责任,无论这些责任是从、因或与软件或其使用或其他方式产生。