我正在将一些旧代码更新为新的编码标准。在此代码中,int
变量使用旧的++
运算符递增。现在,int
变量是一个属性,因此使用++
效果不佳。我不应该使用圆点,我不应该直接引用ivars
这是我提出的(totalHeads是int
类型的属性):
声明部分
@synthesize totalHeads = _totalHeads;
进一步向下
[self setTotalHeads:[self totalHeads] + 1];
替换
的旧代码_totalHeads ++;
有更优雅的方法吗?
(如果这是一个重复的问题,我很难道歉,我很难搞清楚好的搜索条件)
答案 0 :(得分:6)
您可以使用属性和postincrement运算符。这段代码:
@interface Foo: NSObject
@property (assign) int bar;
@end
@implementation Foo
@synthesize bar;
@end
int main() {
Foo *foo = [[Foo alloc] init];
foo.bar = 3;
foo.bar++;
NSLog(@"foo.bar: %d", foo.bar);
[foo release];
return 0;
}
产生这个结果:
2011-06-21 21:17:53.552无题[838:903] foo.bar:4
答案 1 :(得分:1)
这是一个属性并不重要 - 它仍然是一个int,除非你为与该属性相关的ivar声明一个不同的名称,你仍然可以使用totalHeads ++;
答案 2 :(得分:0)
正如您在评论中提到的那样,您不允许使用点语法来访问setter方法,那么[self setTotalHeads:[self totalHeads] + 1];
是唯一的方法。
在所有情况下禁止使用语言功能的编码标准都是徒劳的。也许你可以用这个例子说明你的情况。
答案 3 :(得分:0)
基于有关在NSInteger和int之间进行转换的问题,我想出了以下内容:
- (NSInteger) incrementNSInteger: (NSInteger) nsInt byNumber: (int)increment
{
int integer = nsInt;
integer += increment;
NSInteger result = integer;
return result;
}
使用:
NSInteger one;
NSInteger two = [self incrementNSInteger: one byNumber: 1];
如果你用-1提供“byNumber”,它会减少。同样地,2增加2,减2增加2.(为什么++和 - 不足以让我感到困惑)。