我的问题是,因为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];
答案 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];