1

我在头文件中创建了一个枚举,如下所示

typedef enum {stTMD = 1, stT2MD = 2, stDCMD = 'D', stMBMD = 'M'} stTypes;

首先,我什至不确定这是否是在枚举中声明 char 的正确方法,但正如您所见,有些值是整数,而另一些是字符。但是,当我尝试将这些值放入这样的 NSDicitonary 时,出现以下错误

NSDictionary *iCTypes = [[NSDictionary alloc] initWithObjectsAndKeys:stDCMD,@"stMB", stMBMD,@"stMBMD", nil];

但我在下面收到此错误

Implicit conversion of 'int' to 'id' is disallowed with ARC

任何帮助将不胜感激。

4

4 回答 4

1

Anenum基本上是一种int类型。你的enum定义很好。问题是您在字典中的使用。您需要将enum值包装在NSNumber.

尝试:

NSDictionary *iCTypes = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithInt:stDCMD], @"stMB", [NSNumber numberWithInt:stMBMD] ,@"stMBMD", nil];

甚至更好(使用现代的Objective-C):

NSDictionary *icTypes = @{ @(stDCMD) : @"stMB", @(stMBMD) : @"stMBMD" };
于 2013-07-01T23:22:26.083 回答
1

您需要在其中存储对象,因此不能存储int,而是NSNumber,这可以通过在数字常量之前 附加@来实现:

NSDictionary *iCTypes = [[NSDictionary alloc] initWithObjectsAndKeys: @(stDCMD),@"stMB", @(stMBMD),@"stMBMD", nil];

但是,需要对此进行澄清:

首先,我什至不确定这是否是在枚举中声明 char 的正确方法,但正如您所见,有些值是整数,而另一些是字符。

当您定义一个存储整数的枚举时,是否将 chars 设置为值并不重要,它们与int兼容,因此编译器不会抱怨。但存储类型是相同的,它们仍然是整数,并且任何与整数兼容的类型都将被接受。

于 2013-07-01T23:22:49.050 回答
0

NSDictionary 中的对象和键都必须是对象,并且键具体必须是符合 NSCopying 的对象。为了在 NSDictionary 中使用整数,您必须将它们转换为 NSNumber。您可以使用其中一个[NSNumber numberWithInt:stDCMD],或者,如果您使用的是较新版本的 Xcode,则@(stDCMD).

于 2013-07-01T23:22:25.003 回答
0

在 C 中,char 是一种短整数。enum 只能保存整数类型。NSDictionary 不能保存 C 类型。只有对象。您可以将 C 类型包装在 NSValue 或 NSNumber 中以放入 NSDictionary。

于 2013-07-01T23:22:26.440 回答