Finite 3.1.1

Finite 3.1.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2019年1月
SPM支持SPM

Valentin Knabel维护。



Finite 3.1.1

CocoaPods CocoaPods Install License

Finite

Finite是一个简单的、纯Swift有限状态机。只允许显式允许状态之间的转换,否则会抛出错误。

Finite Swift
2.0.0 2.23.0Beta
3.x.x 3.0和4.0

安装

Finite没有外部依赖,并支持Swift Package ManagerCarthageCocoaPods

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 许可证下使用。