2016-04-07 45 views
1

我有兩個布爾三種狀態:如何使用枚舉而不是三種不同的狀態?

_shouldViewMoveUp = true 
_shouldViewMoveDown = false 

_shouldViewMoveUp = false 
_shouldViewMoveDown = false 

_shouldViewMoveUp = false 
_shouldViewMoveDown = true 

我們需要跟蹤兩個布爾變量羯羊是假/真當存在的關鍵詞幀的變化。我想設計我的代碼看起來更好。

我不知道如何使用枚舉或一個布爾值。你能解釋一下,我可以如何讓我的代碼整潔,或者它是對的?

+0

只是作爲小費,你可能會發現,HTTP://codereview.stackexchange .com /更適合於代碼運行但可以改進的問題。 –

+1

@AdrianWragg不適用於代碼片段。 CR是真正的完整代碼。 – Riker

+0

@easterlyirk記住這一點;我只是看了幾個問題,他們似乎包含片段,沒有深入研究。 –

回答

8

在標題定義enum

typedef NS_ENUM(NSUInteger, MoveDirection) { 
    MOVE_NOWHERE, 
    MOVE_UP, 
    MOVE_DOWN 
}; 

則簡單地使用它,你會使用任何其他原始;例如:

- (void)moveInDirection:(MoveDirection)direction 
{ 
    switch (direction) { 
     case MOVE_UP: 
      // move up 
      break; 
     case MOVE_DOWN: 
      // move down 
      break; 
     default: 
      break; 
    } 
} 

或:

@property (nonatomic, assign) MoveDirection moveDirection; 
+0

擁有兩個布爾值是否太糟糕了?我想知道哪一個更清潔? – Bernard

+1

@Bernard一個'enum'將會更清潔。正如你所看到的,你可以在一個簡單的'switch'語句中實現不移動,上移和下移邏輯,使用兩個'BOOL'將需要更復雜的'if' /'else'語句。設置無效條件也是不可能的。例如,將「_shouldViewMoveUp」和「_shouldViewMoveDown」都設置爲「YES」意味着什麼? – trojanfoe

+1

請使用'NS_ENUM'。 – Sulthan

0

可以使用NSNumber用於存儲方向。

福克斯例如:

@property (nonatomic) NSNumber *movedDown; 


if (nil == self.movedDown) { 
// not moved anywhere 
} else if (self.movedDown.boolValue) { 
// is moved down 
} else { 
// is moved up 
} 

移動時,可以分配@YES@NO

當沒有移動:nil

相關問題