Objective c 目标C中枚举上的迭代?

Objective c 目标C中枚举上的迭代?,objective-c,Objective C,我有 我想这样做: enum Colour { white, pink, yellow, blue } Colour; 我可以这样做吗?如果可以,怎么做?谢谢你的帮助 枚举来自C,而快速枚举是Objective-C 2.0的添加。。他们不在一起工作 for (int colour in Colour){ // Do something here. } 表达式必须符合NSFastEnumeration协议并为对象!枚举的“元素”不是对象 有关更多信息,请

我有

我想这样做:

enum Colour {
    white,
    pink,
    yellow,
    blue
} Colour;

我可以这样做吗?如果可以,怎么做?谢谢你的帮助

枚举来自C,而快速枚举是Objective-C 2.0的添加。。他们不在一起工作

for (int colour in Colour){
    // Do something here.
}
表达式必须符合NSFastEnumeration协议并为对象!枚举的“元素”不是对象

有关更多信息,请参阅此链接

检查此示例以了解枚举的速度:

Type existingItem;
for ( existingItem in expression ) { statements }

虽然问题已经回答了,但这是我的两分钱:

NSArray *array = [NSArray arrayWithObjects:
        @"One", @"Two", @"Three", @"Four", nil];

for (NSString *element in array) {
    NSLog(@"element: %@", element);
}

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
    @"quattuor", @"four", @"quinque", @"five", @"sex", @"six", nil];

NSString *key;
for (key in dictionary) {
    NSLog(@"English: %@, Latin: %@", key, [dictionary objectForKey:key]);
}
枚举颜色{
白色=0,
粉红色
黄色的,
蓝色
colorsCount//因为我们从0开始计数,所以这个数字将是蓝色+1,并且将是实际的“颜色计数”
}颜色;
对于(int i=0;i
我想它并没有那么糟糕,非常接近您想要的快速枚举。

枚举中的“Count”元素很好,但它将在
switch
语句中为您提供“并非所有开关案例都得到处理”,除非您在其中处理此“Count”元素。也许更好的方法是为第一个和最后一个元素使用别名:

enum Colour {
    white = 0,
    pink,
    yellow,
    blue,

    colorsCount // since we count from 0, this number will be blue+1 and will be actual 'colors count'
} Colour;

for (int i = 0; i < colorsCount; ++i)
  someFunc((Colour)i);
枚举颜色{
FirstColor=0,
白色=第一种颜色,
粉红色
黄色的,
蓝色
LASTCOLOR=蓝色
}颜色;

对于(int i=firstcolor;i我来到这篇文章也是为了回答这个问题。Gobra的答案很好。但是我的项目数量可能会波动,并且与存储值相关,因此为了更加安全,“colorsCount”计数是或从来都不是有效值,我最终实现了以下内容,并希望添加到讨论中:

霉色

enum Colour {
    firstColour = 0,

    white = firstColour,
    pink,
    yellow,
    blue,

    lastColour = blue
} Colour;

for (int i = firstColour; i <= lastColour; ++i) {

}
ViewController.m

typedef NS_ENUM( NSInteger, MYColorType )
{
    MYColorType0 = 0,
    MYColorType1,
    MYColorType2,
    MYColorType3
};

static inline MYColorType MYColorTypeFirst() { return MYColorType0; }
static inline MYColorType MYColorTypeLast() { return MYColorType3; }

对于(int i=MYColorTypeFirst();i对于我不是枚举的作者的情况,我这样做。我认为这是非常安全的,因为它不关心枚举类型的实际实现方式

for ( int i = MYColorTypeFirst(); i <= MYColorTypeLast(); i++ )
{
    MYColor * color = [[MYColor alloc] initWithType:i];
    ...
}
UISwipegestureRecognitizerDirection allDirections[]={
UISweepGestureRecognitizerDirectionDown,
UISweepGestureRecognitizerDirectionLeft,
UISweepGestureRecognitizerDirectionRight,
UISweepGestureRecognitzerDirectionUp
};
对于(int i=0;i
这是使用预处理器避免弄脏编译代码的完美用例
在您的.h中:

    UISwipeGestureRecognizerDirection allDirections[] = {
        UISwipeGestureRecognizerDirectionDown,
        UISwipeGestureRecognizerDirectionLeft,
        UISwipeGestureRecognizerDirectionRight,
        UISwipeGestureRecognizerDirectionUp
    };

    for (int i = 0; i < sizeof(allDirections)/sizeof(allDirections[0]); ++i) {
        UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(onSwipe:)];
        swipeGesture.direction = allDirections[i];
        [self addGestureRecognizer:swipeGesture];
    }
应用程序中的其他位置:

typedef NS_ENUM(NSUInteger, EnumValue)
{
    EnumValueOne,
    EnumValueTwo,
    EnumValueThree,
    EnumValueFour
#define EnumValueLast EnumValueFour
};

for(EnumValue value=0;value我不知道,但它显然只会让我在5分钟后这样做;)在这个答案中,我知道我也需要索引值,我如何找到请帮助,谢谢你这实际上就是我最终实现的,谢谢你发布它!非常简单,但也非常好;)我之所以会出错,是因为我
typedef
ed了我的枚举。这种情况有解决办法吗?好主意,但味道不好。将功能潜入枚举这样的标识机制会破坏它的意图和内聚性。dooleyo,这种“枚举”对于C/C++程序员来说非常典型。当然,它只适用于特定的numeric enums.mable duplicate of of当您完成时不需要释放该数组吗..?该数组位于堆栈内存中,当您离开作用域时,它应该会自动清除。如果我创建它并从函数返回它会怎么样?如果它是静态的,它将永远存在。您可以发布一些代码吗,您正在尝试做什么?blue将被触发twice@OlSen不,为蓝色
=
lastColour
for (EnumValue value = 0; value <= EnumValueLast; value++) {
    //do stuff
}