我可以检索枚举/类型中所有项目的列表吗



我想知道,是否可以检索枚举中所有项的列表?

例如我定义的:

typedef enum YouJustUnlocked {
    Unlocked_A,
    Unlocked_B,
    //etc... many more
    Unlocked_Nothing,
}YouJustUnlocked;

有没有办法检索新定义的eumeration类型YouJustUnlocked中所有"项目"(不准确的单词)的列表?

Objective-C支持这一点吗?

我想要这样的东西:

NSArray * array = [YouJustUnlocked returnAllItemsInWrapperObjectForm];
YouJustUnlocked item = (YouJustUnlocked) [array objectAtIndex:0];
//Assuming that array will contain some sort of wrapper object (like NSInteger)

不,如果不使用等效的描述列表,这是不可能的:

YourClass.h:

typedef enum YouJustUnlocked {
    Unlocked_A,
    Unlocked_B,
    //etc... many more
    Unlocked_Nothing,
    // Add this:
    Num_Unlocked
}YouJustUnlocked;

YourClass.m:

static NSString *_youJustUnlockedDesc[Num_Unlocked] = {
    @"Unlocked_A",
    @"Unlocked_B",
    //etc... many more
    @"Unlocked_Nothing",
}
@implementation YourClass
+ (NSString *)youHaveUnlockedDesc:(YouJustUnlocked)yju {
    NSAssert(yju < Num_Unlocked, @"Out-of-range");
    return _youJustUnlockedDesc[yju];
}
...
@end

注:

  • typedef将在头文件中,而描述数组将在实现文件中
  • 按照惯例,Unlocked_Nothing应该是enum的第一个元素

如果 枚举的值是连续的,您可能会这样做:

typedef enum {
        eUnlockedNothing = 0,
        eUnlockedA, /* inferred that this is 1 */
        eUnlockedB,
        eUnlockedMax
    } YouJustUnlocked;
NSMutableArray *array = [NSMutableArray array];
for (int i = eUnlockedNothing + 1; i < eUnlockedMax; i++)
{
    [array addObject:@(eUnlockedNothing + i)];
}
YouJustUnlocked item = (YouJustUnlocked) [[array objectAtIndex:0] intValue]; //enums are default ints.

结果是,您有一个枚举值的数组,可以通过索引进行访问。此数组不包括eUnlockedNothingeUnlockedMax值。

最新更新