SwiftState状态机制
SwiftState 是用 Swift 编写的优雅的状态机制。
举例:
enum MyState: StateType { case state0, state1, state2 }
// setup state machine let machine = StateMachine<MyState, NoEvent>(state: .state0) { machine in machine.addRoute(.state0 => .state1) machine.addRoute(.any => .state2) { context in print("Any => 2, msg=\(context.userInfo)") } machine.addRoute(.state2 => .any) { context in print("2 => Any, msg=\(context.userInfo)") } // add handler (`context = (event, fromState, toState, userInfo)`) machine.addHandler(.state0 => .state1) { context in print("0 => 1") } // add errorHandler machine.addErrorHandler { event, fromState, toState, userInfo in print("[ERROR] \(fromState) => \(toState)") } } // initial XCTAssertEqual(machine.state, MyState.state0) // tryState 0 => 1 => 2 => 1 => 0 machine <- .state1 XCTAssertEqual(machine.state, MyState.state1) machine <- (.state2, "Hello") XCTAssertEqual(machine.state, MyState.state2) machine <- (.state1, "Bye") XCTAssertEqual(machine.state, MyState.state1) machine <- .state0 // fail: no 1 => 0 XCTAssertEqual(machine.state, MyState.state1)
评论