使用一个变量更新另一个变量时如何避免此错误?

How can I avoid this bug when using one variable to update another?

我正在尝试使用一个变量(直径)与另一个变量(baseCurve)协同作用,这样直径每增加 0.5,baseCurve 就会向下调整 0.25,直径每减少 0.5 , baseCurve 向上调整了 0.25。

通过单击 "increase" 或 "decrease" 按钮,以 0.1 为增量调整直径。看起来很简单,但我无法解决当用户添加小于 0.5 然后反转过程时出现的问题。

示例(代码按预期工作): 起始直径 = 9.0; 起始 baseCurve = 42.50

用户点击 "Increase" 5 次,现在直径 = 9.5; baseCurve = 42.25

问题举例:起始直径=9.0; 起始 baseCurve = 42.50

用户点击"Increase" 1x,现在直径=9.1; baseCurve = 42.50

用户然后点击"Decrease" 1x,现在直径= 9.0; baseCurve = 42.75.

问题是,不应该进行任何调整,但我的代码设置为根据模数结果进行调整,从而产生了问题。

任何人都可以指出一种基本上允许用户将 baseCurve 调整 0.25 的方法,每次直径净变化 0.5 吗?我采用的方法,使用计数器和模数检查是行不通的,至少在我设置的时候是这样。我也尝试过切换,但无法避免同样的问题。有什么方法可以使用几个布尔值来完成这项工作吗?提前谢谢了。

var adjustmentSum = 0
var baseCurve = 45.00
var diameter = 9.0
let diameterAdjustmentValue : Float = 0.1
let baseCurveAdjustmentValue : Float = 0.25


@IBAction func increaseDiameter(sender: AnyObject) {

   adjustmentSum++

   diameter = diameter + diameterAdjustmentValue

   if adjustmentSum % 5 == 0 {

        baseCurve = baseCurve - baseCurveAdjustmentValue                           
    }
}

 @IBAction func decreaseDiameter(sender: AnyObject) {

   adjustmentSum--

   diameter = diameter - diameterAdjustmentValue

   if adjustmentSum % 5 == 0 {

        baseCurve = baseCurve + baseCurveAdjustmentValue                              
    }
}

如果我对你的问题理解正确,你甚至不需要使用取模运算符。您可以只保留 increments/decrements 的常规计数器,并在每次更改 baseCurve

时将其重置为零
var adjustmentSum = 0
var baseCurve = 45.00
var diameter = 9.0
let diameterAdjustmentValue : Float = 0.1
let baseCurveAdjustmentValue : Float = 0.25


@IBAction func increaseDiameter(sender: AnyObject) {

    adjustmentSum++

    diameter = diameter + diameterAdjustmentValue

    if adjustmentSum == 5 {

        baseCurve = baseCurve - baseCurveAdjustmentValue
        adjustmentSum = 0
    }
}

@IBAction func decreaseDiameter(sender: AnyObject) {

    adjustmentSum--

    diameter = diameter - diameterAdjustmentValue

    if adjustmentSum == 5 {

        baseCurve = baseCurve + baseCurveAdjustmentValue
        adjustmentSum = 0
    }
}