【问题标题】:Unpacking packed primitives (such as an enum) from NSArray or NSDictionary during fast enumeration在快速枚举期间从 NSArray 或 NSDictionary 解压缩打包的原语(例如枚举)
【发布时间】:2015-02-21 01:57:07
【问题描述】:

您可以通过使用@() 语法将原语打包到 NSArray 或 NSDictionary 中。例如:

typedef enum {
    MyEnumOne,
    MyEnumTwo
} MyEnum

NSDictionary *dictionary = @{
                             @(MyEnumOne) : @"one",
                             @(MyEnumTwo) : @"two"
                             };

但是你如何在快速枚举中使用它呢?例如,类似:

for (MyEnum enum in dictionary) {
    ...
}

这会导致错误Selector element type 'MyEnum' is not a valid object

【问题讨论】:

    标签: objective-c enums nsarray nsdictionary fast-enumeration


    【解决方案1】:

    @() 语法创建一个 boxed NSNumber。因此,在枚举时,将其作为 NSNumber 访问。要将其转换回枚举,首先提取整数值,然后进行转换:

    for (NSNumber *number in dictionary) {
        MyEnum myEnum = (MyEnum)[number intValue];
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多