2016-04-07 27 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

相关问题