mrwest808 / swift-fsm

Very simple finite state machine implementation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

FSM

Very simple finite state machine implementation.

Installation

Install the FSM package with Swift Package Manager, using the following repository URL:

https://github.com/mrwest808/swift-fsm

Usage

import FSM

enum State {
  case idle
  case editing(Int)
}

enum Event {
  case edit(Int)
  case save
}

// Declare the initial state and valid state transitions 
let machine = StateMachine<State, Event>(initial: .idle) { state, event in
  switch (state, event) {
  case (.idle, let .edit(id)):
    return .editing(id)
  case (.editing(_), .save):
    return .idle
  default:
    return nil
  }
}

machine.onTransition { state, event in
  print("\(event): \(machine.previousState) -> \(state)")
}

machine.send(.edit(1))  // prints "edit(1): idle -> editing(1)"
machine.send(.save)     // prints "save: editing(1) -> idle"
machine.send(.save)     // prints nothing (invalid state transition)

About

Very simple finite state machine implementation

License:MIT License


Languages

Language:Swift 100.0%