【问题标题】:adding Char or NSString into Objective C enum将 Char 或 NSString 添加到 Objective C 枚举中
【发布时间】:2013-07-01 23:15:47
【问题描述】:

我在头文件中创建了一个像这样的枚举

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

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

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

但我在下面收到此错误

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

任何帮助将不胜感激。

【问题讨论】:

  • char 值介于 0 到 255 之间。不能使用字符串或 NSString。

标签: ios objective-c enums nsdictionary


【解决方案1】:

enum 基本上是 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" };

【讨论】:

    【解决方案2】:

    你需要在里面存储对象,所以你不能存储一个int,而是一个NSNumber,可以通过附加一个@ 数字常量前:

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

    不过需要澄清一下:

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

    当你定义一个存储整数的枚举时,你是否将字符设置为值并不重要,它们与 int 兼容,因此编译器不会抱怨。但是存储类型是一样的,都是整数,任何兼容整数的类型都可以接受。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多