Objective c 枚举自定义:是否可以创建子枚举?

Objective c 枚举自定义:是否可以创建子枚举?,objective-c,c,enums,customization,Objective C,C,Enums,Customization,这就是代码: typedef enum{ zero, one, two, three, four, five, six, seven, eight, nine }Digits; typedef enum{ zero, one, two, nine }DigitsThatILikeToUse; 问题: 如果我定义函数: void takeMyFavoriteDigits(DigitsThatILikeToUse favorite); (C) -|+(void) takeMy

这就是代码:

typedef enum{
    zero, one, two, three, four, five, six, seven, eight, nine
}Digits;

typedef enum{
    zero, one, two, nine 
}DigitsThatILikeToUse;
问题: 如果我定义函数:

void takeMyFavoriteDigits(DigitsThatILikeToUse favorite); (C)

-|+(void) takeMyFavoriteDigits:(DigitsThatILikeToUse)favorite; (Objective-C)
我不能将其与基本
枚举数字的反向引用一起使用,因为我在
枚举数字中的顺序与我的使用顺序不同

我的解决方案是写出数字的明确位置,如下所示:

typedef enum{
    zero = 0, one = 1, two = 2, nine = 9 
}DigitsThatILikeToUseInEdition;
typedef enum{
        beginIteratorDigitsThatILike, zero, one, two, nine, endIteratorDigitsThatILike, three, four, five, six, seven, eight
    }Digits;
但是!我无法遍历这个新的
enum digitshatiliketoouseinedition

我想在
enum
中创建一个子枚举
subEnum
,并对其进行迭代。可能吗

我的最佳想法是使用以下内容:

typedef enum{
    zero = 0, one = 1, two = 2, nine = 9 
}DigitsThatILikeToUseInEdition;
typedef enum{
        beginIteratorDigitsThatILike, zero, one, two, nine, endIteratorDigitsThatILike, three, four, five, six, seven, eight
    }Digits;
但是可能有什么解决方案吗?

因为(大多数情况下)没有任何问题不能通过添加更多的间接级别来解决:

typedef enum enumDigits {
  digitsNone = -1, 
  digitsZero, digitsOne, digitsTwo, digitsThree, digitsFour, digitsFive, digitsSix, digitsSeven, digitsEight, digitsNine, 
  digitsMax
} Digits_t;

typedef enum enumDigitsIndexIdLikeToUse {
  digitsIndexIdLikeToUseNone = -1, 
  digitsIndexIdLikeToUseZero, digitsIndexIdLikeToUseOne, digitsIndexIdLikeToUseTwo, digitsIndexIdLikeToUseThree, digitsIndexIdLikeToUseFour, 
  digitsIndexIdLikeToUseMax
} DigitsIndexIdLikeToUse_t;

const Digits_t digitsIdLikeToUse[digitsIndexIdLikeToUseMax] = {
  digitsZero, digitsOne, digitsTwo, digitsNine
}
假设您想使用至少1个didigt,您可以:

Digits_t digitIdLikeToUse = digitNone;

...

for (DigitsIndexIdLikeToUse_t digitIndexIdLikeToUse = digitsIndexIdLikeToUseZero, digit = digitsIdLikeToUse[digitIndexIdLikeToUse];
  digitsIndexIdLikeToUse < digitsIndexIdLikeToUseMax;
  ++ digitsIndexIdLikeToUse)
{
  <do something with digitIdLikeToUse>
}
digitalliketouse=digitNone;
...
对于(digitIndexIdLikeToUse\u t digitIndexIdLikeToUse=DigitIndexidLikeToUseZero,digit=digitIndexIdLikeToUse[digitIndexIdLikeToUse];
digitsIndexIdLikeToUse请为您使用的语言添加一个标记。这是三种不同的语言,C++比C或Objor C有更多的特性。请选择一种语言。好, ObjultC.<代码>,但是我在 C <代码>上编写代码。如果在C中编写代码,那么把C标记,而不是ObjuleC和不C++ C++ ObjuleC是C的超集,有些事情你可以用它来做,但是用普通的C语言是做不到的,所以你不需要客观的C语言的答案。C++甚至不是严格的C、C++特定答案的超集,如果你只有C,那么你最可能没有用。看起来Iliketouse应该是一个数组。