質問: ステートマシン - enumは州の選択ですか? 私は状態としてクラス静的変数を持っていたいが、Objective Cはそれを許可しなかった 状態クラスに対して `+(int)LOOPING_STATE` を試しましたが、失敗します ``` switch (myCurrentState) { case [STATE_CLASS LOOPING_STATE]: <== received an error of "expression can't be put here" return; } ``` enumは一般に状態コードを書くための選択ですか? 他に選択肢はありますか?それらのオプションをどのような条件で使用すべきですか? 前もって感謝します。
回答: この状態マシンが高速である必要がある場合は、列挙型を使用します。しかし、これを行うためのオブジェクト指向の方法が必要な場合、各状態の機能は、状態オブジェクト自体のメソッドになります。したがって、switch/ifステートメントをすべて削除することになります。ステートマシンのループは次のようになります: ``` -(void) run { State* currentState; currentState = [self startState]; while (currentState != [self stopState]) { currentState = [currentState transitionWitInput: inputs actions: actions]; } } ``` `inputs` is the input data for the state transition, `actions` is a block or a selector or an `NSInvocation` or something that tells the state what to do during the transition.