2012-01-20 36 views
7

Array của enums - chuyển đổi sang NSArray

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

Hoặc

typedef enum {MyA, MyB, Null} myEnum; 

1) Làm thế nào để tạo ra một mảng

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

Chỉ cần cung cấp cho "Implicit conversion of 'int' to NSNumber* is disallowed with ARC(ref. counting)

2) Nếu bạn có thể crea te một mảng làm thế nào để chuyển đổi nó để NSArray?

Trả lời

15

Cố gắng làm điều đó theo cách này:

typedef enum { MyA, MyB, Null } myEnum; 

Sau đó, để tạo ra một mảng, quấn số vào NSNumber s đối tượng:

NSArray *a = [NSArray arrayWithObjects:[NSNumber numberWithInteger:MyA], 
             [NSNumber numberWithInteger:MyB], 
             nil]; 
+7

cho những người lười biếng, bạn có thể làm theo cách này (yêu cầu Xcode 4 hoặc cao hơn): NSArray * a = @ [@ (MYA), @ (MyB)]; – Vinh

6

Về cơ bản, bạn cần phải quấn giá trị trong một NSNumber đối tượng.

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

[array addObject:INT_OBJ(MyA)]; 

Và chẳng có gì sai trái với mảng khác của bạn, bạn chỉ nên đã xác định nó như thế này:

typedef enum {MyA, MyB, Null} myEnum; 

myEnum values[] = { MyA, MyB }; 

Vấn đề là bạn định nghĩa MyEnum như một NSNumber, mà không phải là tương đương với một giá trị enum (int).

3

Trong Obj C:

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

Trong Swift:

enumArray = NSArray(objects: enum1.rawValue, enum2.rawValue); 
Các vấn đề liên quan