如何在使用NSInteger和int属性时替换增量运算符

时间:2011-06-21 20:13:18

标签: iphone objective-c

我正在将一些旧代码更新为新的编码标准。在此代码中,int变量使用旧的++运算符递增。现在,int变量是一个属性,因此使用++效果不佳。我不应该使用圆点,我不应该直接引用ivars 这是我提出的(totalHeads是int类型的属性):
声明部分

@synthesize totalHeads = _totalHeads;

进一步向下

[self setTotalHeads:[self totalHeads] + 1];

替换

的旧代码
_totalHeads ++;

有更优雅的方法吗?
(如果这是一个重复的问题,我很难道歉,我很难搞清楚好的搜索条件)

4 个答案:

答案 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.(为什么++和 - 不足以让我感到困惑)。