Подтвердить что ты не робот

Как хранить значения перечисления в 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];
4b9b3361

Ответ 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];