A declaritive swift state machine.
enumStateOfMatter:StateTransitionable{typealiasAction=EnergyTransfercase solidcase liquidcase gascase plasmavartransitions:Transitions{when(.increase){transition(from:.solid, to:.liquid)transition(from:.liquid, to:.gas)transition(from:.gas, to:.plasma)}when(.decrease){transition(from:.plasma, to:.gas)transition(from:.gas, to:.liquid)transition(from:.liquid, to:.solid)}}}enumEnergyTransfer{case increasecase decrease}varstateMachine=StateOfMatter.solid.stateMachine()guardlet transition= stateMachine.perform(action:.increase)else{ // no transition occuredreturn}print("transitioned from\(transition.from) to\(transition.to) as result of energy\(transition.action)") //prints: transitioned from solid to liquid as result of energy increase stateMachine.perform(action:.increase)print("current state is\(stateMachine.currentState)") //prints: current state is gasclassExample{varstateMachine=StateOfMatter.solid.stateMachine(){ didSet{print("current state is\(stateMachine.currentState)")}}}letexample=Example() example.stateMachine.perform(action:.increase) // prints: current state is liquid example.stateMachine.perform(action:.increase) // prints: current state is gas