我有一行可怕的代码,它是一个巨大的 PITA,需要反复输入和阅读。我试图在我的类中用一个漂亮、整洁的 BOOL 属性和相应的方法替换它,但它是“flakey”(并且它不会崩溃)。我想用更整洁的东西代替这个可怕的怪物。这是我到目前为止所做的。
这是有效的...
if (self.stretchSideMultiplierCount < [[[NSUserDefaults standardUserDefaults]valueForKey:@"stretchMultiplier"]integerValue] * self.currentStretch.sideMultiplier.integerValue) {
// blah blah blah
}
...但它看起来很可怕,所以我试图通过在实现中创建一个 BOOL 属性来摆脱它:
@property (nonatomic, assign) BOOL lastRoundOfCurrentStretch;
...以及下面的方法...
- (BOOL) lastRoundOfCurrentStretch {
if (self.currentStretch.sideMultiplier.intValue * [[[NSUserDefaults standardUserDefaults]valueForKey:@"defaultStretchRepetition"]intValue] == self.stretchSideMultiplierCount) {
NSLog(@"** LAST ROUND **");
return YES;
} else {
return NO;
}
}
当我完成后,我希望能够使用这个 BOOL 作为替代方法,而不是在我的查询顶部键入可怕的代码行。
if (self.lastRoundOfCurrentStretch == NO) {
// blah blah blah
}
在我进行更改后,该类不再像“过去”那样工作,但没有崩溃。我敢肯定,这归结为我犯了一个非常愚蠢的用户错误,但我很快就找不到答案了。这与我得到的适用于我正在尝试做的事情的答案一样接近。
最佳答案
您的原始代码可以重写为
NSInteger stretchMultiplier = [[[NSUserDefaults standardUserDefaults]valueForKey:@"stretchMultiplier"]integerValue];
NSInteger sideMultiplier = self.currentStretch.sideMultiplier.integerValue;
if (self.stretchSideMultiplierCount < stretchMultiplier * sideMultiplier) {
// blah blah blah
}
您的属性 getter 可以重写为:
- (BOOL) lastRoundOfCurrentStretch {
NSInteger defaultStretchRepetition = [[[NSUserDefaults standardUserDefaults]valueForKey:@"defaultStretchRepetition"]integerValue];
NSInteger sideMultiplier = self.currentStretch.sideMultiplier.integerValue;
return (defaultStretchRepetition * sideMultiplier == self.stretchSideMultiplierCount);
}
现在你能看出区别了吗?您正在加载与用户默认值不同的变量。一旦您使代码更具可读性,这一点就很明显了。
关于ios - 使用 BOOL 替换冗长的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32835167/