StateMachine

0.1.2

State machine creation framework written in Swift inspired by GKStateMachine from Apple GameplayKit
alexruperez/StateMachine

What's New

StateMachine 0.1.2

2018-01-22T17:08:25Z
  • Subscription method update

StateMachine

StateMachine

Twitter Version License Platform Swift Carthage compatible Swift Package Manager Compatible Build Status codecov

Swift library to create Finite-state machines inspired by GKStateMachine from Apple GameplayKit framework.

Test StateMachine working live!

🌟 Features

  • Define States and Their Behavior.
  • Create and Drive a State Machine.
  • Subscribe/unsubscribe to State changes.
  • UIApplication and UIApplicationDelegate extensions with application life cycle State Machine embedded.
  • StatefulViewController subclass with UIViewController life cycle State Machine embedded.

📲 Installation

StateMachine is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'ArchitStateMachine'

Or you can install it with Carthage:

github "alexruperez/StateMachine"

Or install it with Swift Package Manager:

dependencies: [
    .package(url: "https://github.com/alexruperez/StateMachine.git")
]

🐒 Usage

Define States and Their Behavior:

class MyState: State {
    func isValidNext<S>(state type: S.Type) -> Bool where S : State {
        switch type {
        case is OneValidNextState.Type, is OtherValidNextState.Type:
            return true
        default:
            return false
        }
    }
}

class OneValidNextState: State {
    func isValidNext<S>(state type: S.Type) -> Bool where S : State {
        return type is OtherValidNextState.Type
    }

    func didEnter(from previous: State?) {
        // Your code here
    }
}

class OtherValidNextState: State {
    func isValidNext<S>(state type: S.Type) -> Bool where S : State {
        return false
    }

    func willExit(to next: State) {
        // Your code here
    }
}

Create and Drive a State Machine:

let stateMachine = StateMachine([MyState(), OneValidNextState(), OtherValidNextState()])

stateMachine.enter(OneValidNextState.self)

stateMachine.enter(OtherValidNextState.self)

Subscribe/unsubscribe to State changes:

let subscriptionToken = stateMachine.subscribe { (previous, current) in
    // Your code here
}

stateMachine.unsubscribe(subscriptionToken)

stateMachine.unsubscribeAll()

UIApplication and UIApplicationDelegate extensions with application life cycle State Machine embedded:

UIApplication

if UIApplication.shared.stateMachine.current is ActiveApplicationState {
    // Your code here
}

StatefulViewController subclass with UIViewController life cycle State Machine embedded:

StatefulViewController

let viewController = StatefulViewController()

if viewController.stateMachine.current is AppearingViewControllerState {
    // Your code here
}

❤️ Etc.

  • Contributions are very welcome.
  • Attribution is appreciated (let's spread the word!), but not mandatory.

👨‍💻 Authors

alexruperez, contact@alexruperez.com

👮‍♂️ License

StateMachine is available under the MIT license. See the LICENSE file for more info.

Description

  • Swift Tools
View More Packages from this Author

Dependencies

  • None
Last updated: Thu Feb 02 2023 22:40:14 GMT-0500 (GMT-05:00)