我对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
...
}
然后修改它们,但是如果没有额外的变量,有没有更干净,更懒惰的方法呢?对不起,如果这是一个非常基本的问题。感谢您的投入。
答案 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以更新其他值的未来证据。