Swiftpack.co - sergejs/StateMachine as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by sergejs.
sergejs/StateMachine 1.2.2
Swift implamentation of Finite State Machine using Combine & Generics
⭐️ 5
🕓 2 years ago
iOS macOS watchOS tvOS
.package(url: "https://github.com/sergejs/StateMachine.git", from: "1.2.2")

StateMachine

Package containing easy implamentation of Finite State Machine using Combine

To start using, all you need is to defeine enums with States and Events, and define Transitions.

TODO:

[ ] Improved logging control

Example usage

enum TestEvents: EventProtocol {
  case event1, event2
}

enum TestStates: StateProtocol {
  case initial, step1, step2, step1Alt, finish
}

let stateMachine = StateMachine<TestEvents, TestStates>(with: .initial)
let transition = StateMachineTransition<TestEvents, TestStates>(event: .event1, from: .initial, to: .finish)
try? stateMachine.append(transition: transition)
stateMachine.transitionQueue.waitUntilAllOperationsAreFinished()
XCTAssertEqual(stateMachine.state.value, .initial)

stateMachine.event.send(.event1)
stateMachine.transitionQueue.waitUntilAllOperationsAreFinished()
XCTAssertEqual(stateMachine.state.value, .finish)

Check tests for more usage exmples

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics