枚举数组 - 转换为NSArray

Chr*_* G. 12 enums objective-c nsarray

enum {MyA, MyB, Null};
typedef NSNumber myEnum;
Run Code Online (Sandbox Code Playgroud)

要么

typedef enum {MyA, MyB, Null} myEnum;
Run Code Online (Sandbox Code Playgroud)

1)如何创建数组

myEnum* myEnumTemp[] = {MyA, MyB};
Run Code Online (Sandbox Code Playgroud)

只是给 "Implicit conversion of 'int' to NSNumber* is disallowed with ARC(ref. counting)

2)如果你能够创建一个数组如何将其转换为NSArray

小智 20

尝试这样做:

typedef enum { MyA, MyB, Null } myEnum;
Run Code Online (Sandbox Code Playgroud)

然后,要创建数组,请将数字包装到NSNumbers对象中:

NSArray *a = [NSArray arrayWithObjects:[NSNumber numberWithInteger:MyA],
                                       [NSNumber numberWithInteger:MyB],
                                       nil];
Run Code Online (Sandbox Code Playgroud)

  • 对于懒惰的人,你可以这样做(需要Xcode 4或更高版本):NSArray*a = @ [@(MyA),@(MyB)]; (11认同)

Gob*_*i M 8

在Obj C:

enumArray = @[@(enum1),@(enum2)];
Run Code Online (Sandbox Code Playgroud)

在Swift中:

enumArray = NSArray(objects: enum1.rawValue, enum2.rawValue);
Run Code Online (Sandbox Code Playgroud)


Ric*_*III 7

基本上,您需要将值包装在NSNumber对象中.

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

[array addObject:INT_OBJ(MyA)];
Run Code Online (Sandbox Code Playgroud)

你的其他数组没有任何问题,你应该像这样定义它:

typedef enum {MyA, MyB, Null} myEnum;

myEnum values[] = { MyA, MyB };
Run Code Online (Sandbox Code Playgroud)

问题是您将myEnum定义为a NSNumber,它不等于枚举值(int).