问题描述
||
我正在将一些旧代码更新为我们的新编码标准。在此代码中,变量“ 0”使用旧的“ 1”运算符递增。现在,
int
变量是一个属性,因此使用++
效果不佳。我不应该使用点,也不应该直接引用ivars。
这是我想出的(totalHeads是int
类型的属性):
申报部分
@synthesize totalHeads = _totalHeads;
再向下
[self setTotalHeads:[self totalHeads] + 1];
取代了旧的代码
_totalHeads ++;
有没有更优雅的方法可以做到这一点?
(很抱歉,如果这是一个重复的问题,我很难找出好的搜索字词)
解决方法
如评论中所述,如果不允许使用点语法访问setter方法,则“ 8”是唯一的方法。
禁止在任何情况下都使用语言功能的编码标准是无效的。也许您可以使用此示例来说明您的情况。
, 您可以使用属性和后增量运算符。这段代码:
@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
, 属性实际上并不重要,它仍然是一个int,除非您为与该属性相关联的ivar声明不同的名称,否则仍然可以使用totalHeads ++;
, 基于有关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];
如果您为“ byNumber”提供-1,则它将递减。同样,2增加2,-2减少2。(为什么++和-不足以使我感到困惑)。