ios - 使用 BOOL 替换冗长的代码

标签 ios objective-c if-statement boolean

我有一行可怕的代码,它是一个巨大的 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
}

在我进行更改后,该类不再像“过去”那样工作,但没有崩溃。我敢肯定,这归结为我犯了一个非常愚蠢的用户错误,但我很快就找不到答案了。这与我得到的适用于我正在尝试做的事情的答案一样接近。

Using a BOOL property

最佳答案

您的原始代码可以重写为

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/

相关文章:

python - For循环在while循环中中断

python - 'if x.strip( )' 是什么意思?

objective-c - NSManagedObjectContextObjectsDidChangeNotification userInfo 字典

ios - 如何以编程方式调整按钮动画的大小

ios - : @synthesize variableName = __ variableName; 的用途是什么

ios - ScrollView 居中并在第一次显示内容时填充内容 [SwiftUI]

ios - iOS 8 上的 UITableView 背景黑色和空单元格黑色

ios - 由于未捕获的异常 'NSGenericException' 而终止应用程序,原因 : '*** Collection <__NSSetM...> was mutated while being enumerated.'

pandas - 按条件返回列表的子集元素(包括字符串)python pandas

ios - Xcode 5 机器人和 Testflight 自动构建