Skip to content

Instantly share code, notes, and snippets.

@jseanj
Created October 27, 2014 10:44
Show Gist options
  • Save jseanj/e6329d2139f81bf823d0 to your computer and use it in GitHub Desktop.
Save jseanj/e6329d2139f81bf823d0 to your computer and use it in GitHub Desktop.
enum State: Int {
case Init
case Scrolling
case Ready
case Refreshing
case End
}
struct Transition {
var from: State
var to: State
var Condition: String
var before: ()->()
var after: ()->()
}
struct StateMachine {
var initState = State.Init
var currentState: State
var transitions = [
Transition(from: State.Init, to: State.Scrolling, Condition: "drag", before: {
println("before drag")
}, after: {
println("after drag")
}),
Transition(from: State.Scrolling, to: State.Ready, Condition: "top", before: {
}, after: {
}),
Transition(from: State.Ready, to: State.Refreshing, Condition: "release", before: {
}, after: {
}),
Transition(from: State.Refreshing, to: State.End, Condition: "second", before: {
}, after: {
})
]
func isCurrentState(state: State) -> Bool {
if state == currentState {
return true
} else {
return false
}
}
// 表示转移事件是否能在当前状态下触发
func isInvoked(transition: Transition) -> Bool {
if transition.from == currentState {
return true
} else {
return false
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment