0

我对 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 
    ...
}

然后修改它们,但是有没有更干净和更懒惰的方法来做到这一点而没有额外的变量?对不起,如果这是一个非常基本的问题。感谢您的意见。

4

1 回答 1

1

枚举是常量,你不能改变它们的值,你为什么要改变?这就是 ivars 的用途。

NS_ENUM是苹果给我们的一个不错的宏,它扩展为如下内容:

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

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

命名您的枚举以避免冲突也是一个好习惯,也许看看苹果的实现并将其应用于您自己的用例:

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

例如

self.property = 1;

或者

_property = 1;

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

于 2014-03-14T23:12:52.573 回答