RouterStateMachine
描述
该框架提供了 2 个不同的状态机 SimpleStateMachine
和 SyncronizedStateMachine
。第二个提供了阻塞状态变更直到最终化的逻辑。
用法
- 创建路线图提供者。该类将告诉允许哪些转换
final class MockStateProvider: StateProvider {
typealias T = MockState
func canMove(fromState state: MockState, toState to: MockState) -> Bool {
switch (state, to) {
case (.one, .two),
(.two, .three),
(.two, .one),
(.three,. two): return true
default: return false
}
}
}
- 创建代理来监听何时发生更改/错误。在这个示例中,代理被包装在独立的类中。然而,它可以是任何负责基于状态变化执行动作的类。例如,负责导航的 Router
final class DelegateProxyTester {
var proxy: StateMachineDelegateProxy<MockState> {
let proxy = StateMachineDelegateProxy<MockState>()
proxy.willMoveCallback = self.willMove
proxy.errorMoving = self.errorMoving
return proxy
}
func willMove(from state: MockState, toState to: MockState) {
//do the logic based on state change
}
func errorMoving(from state: MockState, toState to: MockState) {
//process the error
}
}
- 连接各部分
mockProvider = MockStateProvider()
proxyTester = DelegateProxyTester()
machineToTest = SimpleStateMachine(initialState: .one, roadMapProvider: mockProvider)
machineToTest.delegateProxy = proxyTester.proxy
同步机
它更像是在 SimpleStateMachine
上面的装饰器,处理防止状态变更的逻辑,直到允许更改。可以将其类比为使用信号量。要使用它,请按上述步骤操作,区别在于需要提供不同的代理
final class SyncDelegateProxyTester {
var proxy: SyncronizedMachineDelegateProxy<MockState> {
let proxy = SyncronizedMachineDelegateProxy<MockState>()
proxy.syncWillMove = willMove
proxy.errorMoving = errorMoving
return proxy
}
func willMove(from state: MockState, toState to: MockState, completion: @escaping () -> Void) {
//do the logic and when it's finished call completion
}
func errorMoving(from state: MockState, toState to: MockState) {
// process the error if need
}
}
安装
RouterStateMachine 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod 'RouterStateMachine'
作者
ALDO Inc.,[email protected]
许可
RouterStateMachine 在 MIT 许可下可用。查看 LICENSE 文件以获取更多信息。