Как сохранить значения перечисления в NSMutableArray - PullRequest
33 голосов
/ 21 марта 2010

Моя проблема в том, что перечисление в target-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];

Ответы [ 6 ]

62 голосов
/ 21 марта 2010

Обернуть значение перечисления в 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];

20 голосов
/ 20 апреля 2014

Современный ответ может выглядеть так:

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

и:

MyColors theGreenColor = ((NSInteger*)list[0]).intValue;
10 голосов
/ 18 апреля 2010

Macatomy ответ правильный. Но вместо NSNumber я бы предложил вам использовать NSValue. Это его цель в жизни.

7 голосов
/ 14 октября 2014
NSMutableArray *corners = [[NSMutableArray alloc] initWithObjects:
                           @(Right), 
                           @(Top), 
                           @(Left), 
                           @(Bottom), nil];
Corner cornerType = [corner[0] intValue];
2 голосов
/ 21 марта 2010

Вы можете обернуть свои значения перечисления в объект NSNumber:

[NSNumber numberWithInt:green];
0 голосов
/ 05 февраля 2015

Чтобы идти с NSNumber, как правило, должно быть правильно. В некоторых случаях может быть полезно использовать их как NSString, поэтому в этом случае вы можете использовать эту строку кода:

[@(MyEnum) stringValue];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...