JREnum 0.2

JREnum 0.2

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最新发布2014年12月

未声明 维护。



JREnum 0.2

  • 作者:
  • Jonathan 'Wolf' Rentzsch

原始 想法实现Benedict Cohen 提供。

JREnum 是一个宏,它自动创建函数,将令人厌烦的原始的编译时环境中的枚举吹送到运行时充满乐趣的环境。

让我们用一个具体的例子来说明。您不需要写成:

typedef enum {
    Stream_Disconnected,
    Stream_Connecting,
    Stream_Connected,
    Stream_Disconnecting
}   StreamState;

请写成

JREnum(StreamState,
       Stream_Disconnected,
       Stream_Connecting,
       Stream_Connected,
       Stream_Disconnecting);

这将生成之前的 typedef enum,并且还会生成一个相应的函数套件

NSString* StreamStateToString(int value)

给定一个值,将返回枚举的字符串表示形式。例如 StreamStateToString(2) 将返回 @"Stream_Connecting"

当遇到不在枚举中定义的值时,此函数将返回一个占位符字符串来解释该情况。例如 StreamStateToString(2000) 将返回 @"<unknown StreamState: 2000>"

BOOL StreamStateFromString(NSString *enumLabel, StreamState *enumValue)

尝试根据枚举的标签返回枚举的 int 值。例如 StreamStateFromString(@"Stream_Disconnecting", &value) 将返回 YES 并将 value设置为 3

如果枚举类型的标签未知,则此函数返回 NO。例如 StreamStateFromString(@"lackadaisical", &value) 将返回 NO 并不改变 value

NSDictionary* StreamStateByValue()

返回一个字典,其键是枚举的值。由 StreamStateToString() 使用。

当枚举具有多个重叠的值时,当前实现显示最后写入覆盖行为。

NSDictionary* StreamStateByLabel()

返回一个字典,其键是枚举的标签。由 StreamStateFromString() 使用。如果您想在运行时枚举枚举的标签和值,则这是一个您想要的函数。

分割头文件/源文件

JREnum() 对于当您有一个仅存在于 .m 文件中的枚举时是足够的。但是,如果您在头文件中暴露一个枚举,您必须使用备选宏。在您的 .h 文件中使用 JREnumDeclare()

JREnumDeclare(StreamState,
              Stream_Disconnected,
              Stream_Connecting,
              Stream_Connected,
              Stream_Disconnecting);

然后在您的 .m 文件中使用 JREnumDefine()

JREnumDefine(StreamState);

显式值

您还可以显式定义枚举整数值

JREnum(StreamState,
       Stream_Disconnected = 42,
       Stream_Connecting,
       Stream_Connected,
       Stream_Disconnecting);

在上面的场景中,Stream_Disconnected 的值将是 42Stream_Connecting 的值将是 43 等等。

JREnum 目前仅支持整数显式值(位操作和掩码将不起作用)。欢迎补丁。

版本历史

v0.2: 2012年12月10日

  • [新增] 通用到支持双向枚举标签/值查找和完整的运行时访问查找字典。
  • [新增] 添加测试用例。
  • [新增] 编写此 README。

v0.1: 2012年12月9日

  • 【新功能】设计了一种方法,允许分步声明/定义宏,以便在头文件/源文件中使用。

前缀:2012年12月8日