【问题标题】:ObjC - NS_ENUM order?ObjC - NS_ENUM 命令?
【发布时间】:2014-11-12 15:46:42
【问题描述】:

给定一个 NS_ENUM 枚举宏:

typedef NS_ENUM(NSInteger, UITableViewCellStyle) {
    UITableViewCellStyleDefault,
    UITableViewCellStyleValue1,
    UITableViewCellStyleValue2,
    UITableViewCellStyleSubtitle
};

元素的顺序是什么?我的意思是每个元素的底层整数值。

例如,UITableViewCellStyleDefault 的值为 0,UITableViewCellStyleValue1 的值为 1,UITableViewCellStyleValue2 的值为 2,UITableViewCellStyleSubtitle 的值为 3?

或者可以是这样的:UITableViewCellStyleDefault 的值为 30,UITableViewCellStyleValue1 的值为 15,UITableViewCellStyleValue2 的值为 23,UITableViewCellStyleSubtitle 的值为 3?

谢谢

【问题讨论】:

  • 使用 NS_ENUM 时从 0 开始顺序排列。 NS_OPTIONS 将用于给出任意值。值得注意的是,对于 NS_ENUM,该值并不重要。如果您的代码依赖于某些特定值,则可能是其他问题的代码异味。
  • ^ 没错。你应该把它变成一个答案
  • typedef NS_ENUM(NSInteger, UITableViewCellStyle) {...};typedef enum : Integer {...} UITableViewCellStyle; 相同,这就是 NS_ENUM 所做的。

标签: objective-c macros enums


【解决方案1】:

NS_ENUM 值从 0 开始并依次增加。所以在UITableViewCellStyle 示例的情况下,因为它是在那里编码的,所以这些值是正确的。通常不能保证枚举的顺序不会改变,因此您应该真正考虑这些值是不透明的;当然,在大多数情况下,您不应该比较它们或尝试用数学做任何聪明的事情。如果实际值很重要,NS_OPTIONS 将是一个更好的选择,但即使这样,基础值也可能会发生变化,这对依赖于选项集的代码不会产生任何影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2012-12-14
    • 2012-11-20
    • 2015-06-27
    相关资源
    最近更新 更多