0

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

因此,发现状态更改逻辑是什么并不容易/显而易见,因此我正在考虑将状态更改集中在一个专用方法中,类似于以下伪代码

- (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 中很容易)

4

1 回答 1

0

为什么不让这些方法将状态传递给 updateState:?

例如

typedef enum {
    EStateA,
    EStateB
} EState;

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

- (void) delegateCallbackConnectionSuccess {
    [self updateState:EStateB];
}
于 2012-04-24T22:32:17.707 回答