无法弄清楚NS_ENUM。我可以更改其中的值吗?

时间:2014-03-14 22:55:55

标签: objective-c variables scope nsenumerator

我对Objective-C非常陌生。我遇到了这个问题:

NS_ENUM(NSUInteger, SetOfValues)
{ 
    firstRow = 0,
    secondRow,
    thirdRow,
    rowCount
};

现在,我需要在实现中更改这些变量:

@implementation BillyBurroughs 
...

- (void) modifyrowInformation
{
    secondRow = 0;
    thirdRow = 1;
    rowCount = 2
}

@end

但当然,我得到一个错误说 - 不能分配价值。现在,我可以简单地将变量读取到局部变量,如

+ (void) initialize {
    localFirstRow = 0 
    ...
}

然后修改它们,但是如果没有额外的变量,有没有更干净,更懒惰的方法呢?对不起,如果这是一个非常基本的问题。感谢您的投入。

1 个答案:

答案 0 :(得分:1)

枚举是常量,你不能改变它们的价值,为什么你想要?这就是伊娃所用的。

NS_ENUM是一个很棒的宏苹果给了我们,扩展到如下所示:

typedef enum {
    firstRow = 0,
    secondRow,
    thirdRow,
    rowCount,
} SetOfValues;

注意:除非指定,否则默认情况下会为第一个元素初始化 0。

将枚举命名为命名空间以避免冲突也是一种好习惯,可以查看apple实现并将其应用到您自己的用例中:

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

也许您要找的是属性还是数组?

array = @[ @1, @2, @3, @4 ];

在评论中修改问题:

在您的实施文件(.m)中,您可以创建一个私有标题:

@interface OKAClass ()
  @property (nonatomic, assign) NSUInteger property;
@end

然后,您可以使用self_property

从该课程中访问该媒体资源

e.g。

self.property = 1;

_property = 1;

不同之处在于self.property使用生成的访问器并且可能是您想要使用的,这将是您希望覆盖getter / setter以更新其他值的未来证据。