【问题标题】:Array of enums - convert to NSArray枚举数组 - 转换为 NSArray
【发布时间】:2012-02-15 01:01:35
【问题描述】:

拥有

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

【问题讨论】:

    标签: objective-c enums nsarray


    【解决方案1】:

    尝试这样做:

    typedef enum { MyA, MyB, Null } myEnum;
    

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

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

    【讨论】:

    • 对于懒惰的人,你可以这样做(需要 Xcode 4 或更高版本): NSArray *a = @[@(MyA),@(MyB)];
    【解决方案2】:

    在对象 C 中:

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

    在斯威夫特中:

    enumArray = NSArray(objects: enum1.rawValue, enum2.rawValue);
    

    【讨论】:

      【解决方案3】:

      基本上,您需要将值包装在 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,它不等于枚举值 (int)。

      【讨论】:

      • 第二种方式我们可以使用可变数组吗?
      猜你喜欢
      • 2013-01-17
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      相关资源
      最近更新 更多