我想知道,是否可以检索枚举中所有项的列表?
例如我定义的:
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.
结果是,您有一个枚举值的数组,可以通过索引进行访问。此数组不包括eUnlockedNothing
或eUnlockedMax
值。