Stateful 2.3.0

Stateful 2.3.0

Alberto De Bortoli 维护。



Stateful 2.3.0

Stateful 🦜

Build Status Version License Platform

Swift 中最容易使用的状态机。

Stateful 是一个简洁、线程安全、无样板代码且非常容易使用的 Swift 状态机。

示例

  • 定义您需要的事件和状态。例如:
enum EventType {
    case start
    case pause
}

enum StateType {
    case idle
    case started
}
  • 创建一个具有初始状态的状态机(您可能希望将其保留在属性中)
let stateMachine = StateMachine<StateType, EventType>(initialState: .idle)

StateMachine 将使用主队列来执行转换前后的代码块,但您可以提供自定义队列。

let dispatchQueue = DispatchQueue(label: "com.albertodebortoli.someSerialCallbackQueue")
let stateMachine = StateMachine<StateType, EventType>(initialState: StateType.idle, callbackQueue: dispatchQueue)
  • 创建转换并将它们添加到状态机中(状态机将自动识别新状态)
let t1 = Transition<StateType, EventType>(with: .start,
                    from: .idle,
                    to: .started)
                    
let t2 = Transition<StateType, EventType>(with: .pause,
                    from: .started,
                    to: .idle,
                    preBlock: {
                        print("Going to move from \(StateType.started) to \(StateType.idle)!")
                    }, postBlock: {
                        print("Just moved from \(StateType.started) to \(StateType.idle)!")
    })

stateMachine.add(transition: t1)
stateMachine.add(transition: t2)
  • 按照如下方式处理事件
stateMachine.process(event: .start)
stateMachine.process(event: .pause, callback: { result in
    switch result {
    case .success:
        print("Event 'pause' was processed")
    case .failure:
        print("Event 'pause' cannot currently be processed.")
    }
})

日志记录

您可以选择启用日志记录,以便在控制台中打印额外的状态更改信息

stateMachine.enableLogging = true

示例

[Stateful 🦜]: Processing event 'start' from 'idle'
[Stateful 🦜]: Processed pre condition for event 'start' from 'idle' to 'started'
[Stateful 🦜]: Processed state change from 'idle' to 'started'
[Stateful 🦜]: Processed post condition for event 'start' from 'idle' to 'started'
[Stateful 🦜]: Processing event 'stop' from 'started'
[Stateful 🦜]: Processed pre condition for event 'stop' from 'started' to 'idle'
[Stateful 🦜]: Processed state change from 'started' to 'idle'
[Stateful 🦜]: Processed post condition for event 'stop' from 'started' to 'idle'

安装

Stateful 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中

pod 'Stateful'

作者

Alberto De Bortoli, [email protected]

许可

Stateful在MIT许可下可用。有关更多信息,请参阅LICENSE文件。