Finite
Finite是一个简单的、纯Swift有限状态机。只允许显式允许状态之间的转换,否则会抛出错误。
Finite | Swift |
---|---|
2.0.0 |
2.2 和3.0Beta |
3.x.x |
3.0和4.0 |
安装
Finite没有外部依赖,并支持Swift Package Manager,Carthage和CocoaPods。
Swift Package Manager
import PackageDescription
let package = Package(
name: "YourPackage",
dependencies: [
.Package(url: "https://github.com/vknabel/Finite.git", majorVersion: 3)
]
)
Carthage
github "vknabel/Finite"
CocoaPods
source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
pod 'Finite'
简介
它在给定的类型上操作,其中每个值代表机器的内部状态。一个 StateMachine
通过提供所有允许的状态转换来定义。
enum Test: Int {
case saving, fetching, deleting
case ready, fail
}
var machine = StateMachine<Test>(initial: .ready) { c in
c.allow(from: [.saving, .fetching, .deleting], to: [.ready, .fail])
c.allow(from: .ready, to: [.saving, .fetching, .deleting])
}
可以提供回调,当某些转换发生时会被调用。
machine.onTransitions(from: .ready) {
println("From Ready: show activity indicator")
}
machine.onTransitions(to: .ready) {
println("To Ready: hide activity indicator")
}
machine.onTransitions(to: .saving) {
println("To: save")
}
一旦 StateMachine
已设置,您可以触发您在上文中声明的所有转换。
try machine.transition(to: .saving) {
println("Triggered: save")
}
// this will throw an error
try machine.transition(to: .fetching)
作者
Valentin Knabel, [email protected]
特别感谢 @snofla 允许导出状态机到 graphviz。
许可证
Finite 可以在 MIT 许可证下使用。