【问题标题】:enum values passing as arguments in Objective-C在 Objective-C 中作为参数传递的枚举值
【发布时间】:2013-10-25 06:47:45
【问题描述】:

我有一个枚举。

例子:

枚举事件

{

MOVE_UP = 0,
MOVE_DOWN,
MOVE_RIGHT,
MOVE_LEFT,

};

我想将特定的枚举值作为函数参数传递。例如:

我的方法定义是

  • (void) invokeEvents:(enum events)events withMessage:(NSDictionary*)message;

在调用此方法时,我传递的参数如下:

[self invokeEvents:MOVE_UP|MOVE_DOWN|MOVE_RIGHT withMessage:message;

在检查接收到的参数事件时,值始终是 MOVE_UP|MOVE_DOWN|MOVE_RIGHT 值列表的最后一个值。 MOVE_RIGHT 2 根据枚举值。

但我希望“MOVE_UP|MOVE_DOWN|MOVE_RIGHT”等所有值都等于 0、1 和 2。 我如何传递参数以便我可以获取所有值。

请就我的问题提出建议。

提前致谢。

【问题讨论】:

  • 我以前也遇到过同样的问题,经过一番研究,找不到解决办法。
  • @Liang 让我们看看其他人有什么解决方案,然后你为这个问题做了什么或用什么方法,我的意思是你用什么替代方法来解决这个问题

标签: objective-c enums


【解决方案1】:

将您的枚举更改为:

{
MOVE_NONE = 0
MOVE_UP = 1<<0,
MOVE_DOWN = 1<<1,
MOVE_RIGHT = 1<<2,
MOVE_LEFT = 1<<3,
};

因此您可以完全按照自己的意愿传递参数:MOVE_UP|MOVE_DOWN|MOVE_RIGHT

并在invokeEvents:withMessage:检查

if(events & MOVE_UP)
{
}
if(events & MOVE_DOWN)
{
}
...

.

【讨论】:

  • 谢谢@Sviatoslav Yakymiv。
  • 如何将此值存储在数组中。例如: events = MOVE_UP|MOVE_DOWN 表示事件的值是 MOVE_UP = 0001 和 MOVE_DOWN = 0010。假设现在只有 4 位,值是 0011 我想存储这个值。在objective-c中哪种数据类型适合这个。
  • 是 NSInteger 可以被包裹 NSNumber 对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 2011-04-24
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多