有
typedef NSNumber myEnum;
要么typedef enum {MyA, MyB, Null} myEnum;
如何创建数组
只是给```"Implicit conversion of 'int' to NSNumber* is disallowed with ARC(ref. counting)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在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
对象。NS_ENUM
),然后在需要时将枚举值转换为NSNumber
。如果采用标准的Objective-C枚举定义,代码可能如下:
typedef NS_ENUM(NSInteger, MyEnum) {
MyA,
MyB,
Null
};
// 转换为NSNumber并创建数组
NSArray<NSNumber *> *arrayWithEnums = @[@(MyA), @(MyB), @(Null)];
这样既保持了代码的清晰性,也便于理解和维护。