如何在NSMutableArray中存储枚举值

时间:2010-03-21 15:30:44

标签: iphone objective-c cocoa

我的问题是,因为objective-c中的枚举本质上是一个int值,我无法将其存储在NSMutableArray中。显然NSMutableArray不会像int那样采用任何c数据类型。

有没有通用的方法来实现这个目标?

typedef enum 
{
    green,
    blue,
    red

} MyColors;


NSMutableArray *list = [[NSMutableArray alloc] initWithObjects:
                             green,
                             blue,
                             red,
                             nil];

//Get enum value back out
MyColors greenColor = [list objectAtIndex:0];

6 个答案:

答案 0 :(得分:62)

在将枚举值放入数组之前将其包装在NSNumber中:

NSNumber *greenColor = [NSNumber numberWithInt:green];
NSNumber *redColor = [NSNumber numberWithInt:red];
NSNumber *blueColor = [NSNumber numberWithInt:blue];
NSMutableArray *list = [[NSMutableArray alloc] initWithObjects:
                             greenColor,
                             blueColor,
                             redColor,
                             nil];

并像这样检索它:

MyColors theGreenColor = [[list objectAtIndex:0] intValue];

答案 1 :(得分:19)

现代答案可能如下:

NSMutableArray *list = 
 [NSMutableArray arrayWithArray:@[@(green), @(red), @(blue)]];

MyColors theGreenColor = ((NSInteger*)list[0]).intValue;

答案 2 :(得分:10)

Macatomy的答案是正确的。但是我会建议你使用NSValue而不是NSNumber。这就是它的人生目标。

答案 3 :(得分:7)

NSMutableArray *corners = [[NSMutableArray alloc] initWithObjects:
                           @(Right), 
                           @(Top), 
                           @(Left), 
                           @(Bottom), nil];
Corner cornerType = [corner[0] intValue];

答案 4 :(得分:2)

您可以将枚举值包装在NSNumber对象中:

[NSNumber numberWithInt:green];

答案 5 :(得分:0)

NSNumber一起使用应该是正常的方法。在某些情况下,将它们用作NSString会很有用,所以在这种情况下你可以使用这行代码:

[@(MyEnum) stringValue];