Массив перечислений - преобразовать в NSArray - PullRequest
11 голосов
/ 20 января 2012

Имея

enum {MyA, MyB, Null};
typedef NSNumber myEnum;

Или

typedef enum {MyA, MyB, Null} myEnum;

1) Как мне создать массив

myEnum* myEnumTemp[] = {MyA, MyB};

Просто дает "Implicit conversion of 'int' to NSNumber* is disallowed with ARC(ref. counting)

2) Если вы можете создать массив, как преобразовать его в NSArray?

Ответы [ 3 ]

19 голосов
/ 20 января 2012

Попробуйте сделать это следующим образом:

typedef enum { MyA, MyB, Null } myEnum;

Затем, чтобы создать массив, оберните числа в NSNumber s объекты:

NSArray *a = [NSArray arrayWithObjects:[NSNumber numberWithInteger:MyA],
                                       [NSNumber numberWithInteger:MyB],
                                       nil];
7 голосов
/ 05 апреля 2016

В Obj C:

enumArray = @[@(enum1),@(enum2)];

В Swift:

enumArray = NSArray(objects: enum1.rawValue, enum2.rawValue);
6 голосов
/ 20 января 2012

Как правило, вам нужно обернуть значение в NSNumber объект.

#define INT_OBJ(x) [NSNumber numberWithInt:x]

[array addObject:INT_OBJ(MyA)];

И в вашем другом массиве не было ничего плохого, вы просто должны были определить его так:

typedef enum {MyA, MyB, Null} myEnum;

myEnum values[] = { MyA, MyB };

Проблема заключалась в том, что вы определили myEnum как NSNumber, который не равен значению enum (int).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...