Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- protocol State {}
- struct Transition<From: State, To: State> {
- let transition: () -> To
- }
- struct Machine<CurrentState: State> {
- var state: CurrentState
- func transition<To>(with transition: Transition<CurrentState, To>) -> Machine<To> where To: State {
- return Machine<To>(state: transition.transition())
- }
- }
- struct Pending: State {}
- struct Loading: State {}
- struct Loaded: State {}
- struct Failed: State {}
- let kickoff = Transition<Pending, Loading>(transition: { return Loading() })
- let finishLoading = Transition<Loading, Loaded>(transition: { return Loaded() })
- let machine = Machine<Pending>(state: Pending())
- let newMachine = machine.transition(with: kickoff) // compiles
- newMachine.transition(with: finishLoading)
- machine.transition(with: finishLoading) // Cannot convert value of type 'Transition<Loading, Loaded>' to expected argument type 'Transition<Pending, _>'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement