将方法名称传递给状态更改对象的选项

时间:2012-04-24 21:43:46

标签: ios

我有一个国家驱动的课程,根据发生的事情改变状态。该类有一个状态属性,它从许多地方被调用,这些地方以各种方法散布在整个代码中。

因此,发现状态变化逻辑是不容易/明显的,所以我想在一个专用方法中集中状态变化,这与下面的伪代码一致

- (void) updateState: (Param) action
{
   switch (self.currentState)
     case: EStateA: 
           if (action == connectionSuccesful)
              self.currentState = EStateB;
           else
              self.currentState = EStateC;
     break;
}


- (void) delegateCallbackConnectionSuccess
{
    [self updateState: Param];
}

因此updateState方法需要知道为了改变状态而发生了什么动作,动作被封装为方法,因此updateState方法需要知道调用它的方法。

所以我的问题是如何最好地实现这个,Param应该是什么类型的? 有什么选择? SEL,@ selector,NSInvocation,其他什么?

TIA

(实现一个完整的状态模式似乎有点矫枉过正,除非在iOS中很容易)

1 个答案:

答案 0 :(得分:0)

为什么没有方法将状态传递给updateState:?

E.g。

typedef enum {
    EStateA,
    EStateB
} EState;

- (void) updateState: (EState) newState {
    switch (self.currentState): {
        ...
    }
    self.currentState = newState;
}

- (void) delegateCallbackConnectionSuccess {
    [self updateState:EStateB];
}