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应该是一个数组。