Package -

CocoaPods CocoaPods Install License

Finite

Finite is a simple, pure Swift finite state machine. Only exlicitly allowed transitions between states are allowed, otherwise an error will be thrown.

| Finite | Swift | |------------|----------------------| | 2.0.0 | 2.2 and 3.0 Beta | | 3.x.x | 3.0 and 4.0 |

Installation

Finite has no external dependencies and supports Swift Package Manager, Carthage and 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'

Introduction

It operates on a given type, where each value represents an internal state of the machine. A StateMachine is defined by providing all allowed state transitions.

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])
}

It is possible to provide callbacks, that will be called once certain transitions will happen.

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")
}

Once the StateMachine has been set up, you may trigger all transitions you have declared above.

try machine.transition(to: .saving) {
    println("Triggered: save")
}

// this will throw an error
try machine.transition(to: .fetching)

Author

Valentin Knabel, dev@vknabel.com

Special thanks to @snofla for allowing to export state machines to graphviz.

License

Finite is available under the MIT license.

Github

link
Stars:

Advertisement