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
}