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)评论
