Как мога да избегна тази грешка, когато използвам една променлива за актуализиране на друга?

Опитвам се да използвам една променлива (диаметър), за да действам съвместно с друга променлива (baseCurve), така че за всяко 0,5 увеличение на диаметъра, baseCurve се коригира надолу с 0,25, а за всяко 0,5 намаление на диаметъра, baseCurve се коригира нагоре с 0,25.

Диаметърът се регулира на стъпки от 0,1 чрез щракване върху бутон "увеличаване" или "намаляване". Изглежда достатъчно просто, но не мога да преодолея проблема, който възниква, когато потребителят добави по-малко от 0,5 и след това обърне курса.

Пример (кодът работи по предназначение): начален диаметър = 9,0; начална базова крива = 42.50

Потребителят кликва върху „Увеличаване“ 5 пъти, сега диаметър = 9,5; базова крива = 42.25

Пример за проблем: начален диаметър = 9,0; начална базова крива = 42.50

Потребителят кликва върху „Увеличаване“ 1x, сега диаметър = 9,1; базова крива = 42.50

След това потребителят щраква върху „Намаляване“ 1x, сега диаметър = 9.0; базова крива = 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                              
    }
}

person NoClue    schedule 28.07.2015    source източник


Отговори (1)


Ако разбирам проблема ви правилно, дори не е нужно да използвате оператора на модула. Можете просто да поддържате редовен брояч на увеличенията/намаленията и да го нулирате всеки път, когато правите промяна в 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
    }
}
person orahman    schedule 29.07.2015