Как хранить значения перечисления в NSMutableArray
Моя проблема в том, что перечисление в objective-c по существу является значением int, я не могу его сохранить в NSMutableArray
. По-видимому, NSMutableArray
не будет брать какие-либо c-типы данных, такие как int.
Есть ли общий способ достижения этого?
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];
Ответы
Ответ 1
Оберните значение перечисления в 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];
Ответ 2
Современный ответ может выглядеть так:
NSMutableArray *list =
[NSMutableArray arrayWithArray:@[@(green), @(red), @(blue)]];
и
MyColors theGreenColor = ((NSInteger*)list[0]).intValue;
Ответ 3
Ответ на Macatomy правильный. Но вместо NSNumber я предлагаю вам использовать NSValue. Это его цель в жизни.
Ответ 4
NSMutableArray *corners = [[NSMutableArray alloc] initWithObjects:
@(Right),
@(Top),
@(Left),
@(Bottom), nil];
Corner cornerType = [corner[0] intValue];
Ответ 5
Вы можете обернуть ваши значения перечисления в объекте NSNumber:
[NSNumber numberWithInt:green];
Ответ 6
Для перехода с NSNumber
должен быть правильный путь. В некоторых случаях может быть полезно использовать их как NSString
, поэтому в этом случае вы можете использовать эту строку кода:
[@(MyEnum) stringValue];