RouterStateMachine 0.2.2

RouterStateMachine 0.2.2

Alex HmelevskiPiyush Sharma 维护。



  • ALDO Inc.

RouterStateMachine

CircleCI Version License Platform

描述

该框架提供了 2 个不同的状态机 SimpleStateMachineSyncronizedStateMachine。第二个提供了阻塞状态变更直到最终化的逻辑。

用法

  • 创建路线图提供者。该类将告诉允许哪些转换
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 文件以获取更多信息。