【问题标题】:Getting total number of enum items获取枚举项的总数
【发布时间】:2010-11-30 23:02:14
【问题描述】:

是否可以在运行时获取枚举定义的项目总数?

虽然它与this one 的问题几乎相同,但该问题与 C# 有关,据我所知,那里提供的方法在 Objective-C 中不起作用。

【问题讨论】:

    标签: objective-c c enums


    【解决方案1】:

    enum 是普通的旧 C 类型,因此它不提供动态运行时信息。

    另一种方法是使用枚举的最后一个元素来指示计数:

    typedef enum {
        Red,
        Green,
        Blue,
        numColors
    } Color;
    

    【讨论】:

    • 适用于连续值,对于 typedef enum { Red=0xff0000, Green=0x00ff00, Blue=0x0000ff, numColors} Color; 完全失败。
    • 就像马克说的那样,这对于他的例子来说会很失败,达伦提供的替代方案非常适合我的需要。谢谢。
    • 在这里寻找更好的、完全自动化但有潜在危险的解决方案:stackoverflow.com/q/24695580/269753
    【解决方案2】:

    使用预处理器,您可以实现这一目标,而无需为枚举添加额外值的烦人“hack”

    #define __YourEnums \
    YourEnum_one, \
    YourEnum_two, \
    YourEnum_three, \
    YourEnum_four, \
    YourEnum_five, \
    YourEnum_six,
    
    typedef enum : NSInteger {
    __YourEnums
    }YourEnum;
    
    #define YourEnum_count ({ \
    NSInteger __YourEnumsArray[] = {__YourEnums}; \
    sizeof(__YourEnumsArray)/sizeof(__YourEnumsArray[0]); \
    })
    

    【讨论】:

      猜你喜欢
      • 2019-12-30
      • 2017-01-14
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 2022-08-13
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多