0

何が起こるかに応じて状態を変更する状態駆動型クラスがあります。クラスには、さまざまなメソッドのコード全体に散りばめられた多数の場所から呼び出される状態プロパティがあります。

その結果、状態変更ロジックが何であるかを特定するのは簡単/明白ではないため、次の擬似コードの行に沿って、専用のメソッドで状態変更を集中化することを考えていました

- (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、その他?

ティア

(本格的な状態パターンの実装は、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 に答える