开发者社区 问答 正文

C-枚举数组转换为NSrray

typedef NSNumber myEnum;

要么typedef enum {MyA, MyB, Null} myEnum;
如何创建数组


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

展开
收起
南南唐语 2019-12-02 20:38:20 629 分享 版权
阿里云 AI 助理回答

在Objective-C中,当你使用NSNumber作为枚举的类型定义时,实际上你是想创建一个可以存储整数值的对象数组,因为NSNumber是Foundation框架中的一个类,用于封装基本数据类型如int、float等。而直接用enum定义的类型则是原始的C语言枚举类型,不是对象。

针对你的问题,如果你想创建一个包含枚举值的NSNumber数组,并且避免ARC(Automatic Reference Counting)报错,你可以按照以下步骤操作:

使用@[]快速创建数组

如果你的枚举是基于enum的,首先需要将枚举值转换为NSNumber对象,然后再放入数组中。但根据你的第一种定义方式(尽管这种定义方式在Objective-C中并不标准),我们假设你想通过NSNumber来模拟枚举行为。下面是创建数组的示例代码:

// 假设你已经这样定义了枚举(注意:通常不推荐这种方式定义枚举)
typedef NSNumber myEnum;

// 创建NSNumber对象表示枚举值
NSNumber *myA = @(MyA); // 注意这里MyA应该是具体的整数值或者之前已定义的枚举成员
NSNumber *myB = @(MyB);
NSNumber *nullValue = @(Null);

// 创建含有NSNumber对象的数组
NSArray<NSNumber *> *myArray = @[@(MyA), @(MyB), @(Null)];

// 或者动态添加
NSMutableArray<NSNumber *> *mutableArray = [NSMutableArray array];
[mutableArray addObject:myA];
[mutableArray addObject:myB];
[mutableArray addObject:nullValue];

解释

  • @()语法是Boxing操作,它会把原始数据类型自动装箱成对应的对象类型,比如@(MyA)会将整数MyA转换为NSNumber对象。
  • 由于你提到了ARC错误,确保在处理这些对象时遵循ARC规则,即不要直接赋值原始类型给对象指针,而是应该使用对象包装。
  • 在实际开发中,更常见的做法是直接使用标准的Objective-C枚举类型(NS_ENUM),然后在需要时将枚举值转换为NSNumber

标准枚举示例

如果采用标准的Objective-C枚举定义,代码可能如下:

typedef NS_ENUM(NSInteger, MyEnum) {
    MyA,
    MyB,
    Null
};

// 转换为NSNumber并创建数组
NSArray<NSNumber *> *arrayWithEnums = @[@(MyA), @(MyB), @(Null)];

这样既保持了代码的清晰性,也便于理解和维护。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: