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)
在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)
基本上,您需要将值包装在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).