2016-11-10 3 views
0

Я хочу, чтобы вычислить количество в режиме реального времени с UISlider, это мой метод:UISlider ValueChanged действие не работает

@IBAction func HPsliderValueChanged(_ sender: CustomUISlider) { 

    calculator.HPPercentage = Double(HPSlider.value) 
    HPValue.text = String(Int(HPSlider.value * 100)) + " %" 
    resultLabel.text = String(calculator.calculate()) 
} 

Оба HPValue этикетки и resultLabel, как ожидается, изменить значение, когда пользователь пойло на ползуне, однако, теперь только HPValue смена метки, resultLabel не работает.

calculator не ноль, вот его код:

class TurretDiveCalculator { 

var hero: Heroes = .taka 
var build = [DefenseItems](repeatElement(DefenseItems(name: "Empty Item", index: 0, price: 0, image: #imageLiteral(resourceName: "EmptyItem")), count: 6)) 
var HPPercentage: Double = 0 

func calculate() -> Int { 
    let baseHP = hero.HPLow + (hero.HPHigh - hero.HPLow)/12 * Double(hero.level) 
    let baseDefense = hero.armorLow + (hero.armorHigh - hero.armorLow)/12 * Double(hero.level) + hero.shieldLow + (hero.shieldHigh - hero.shieldLow)/12 * Double(hero.level) 

    var buildHP = 0.0 
    var buildDefense = 0.0 
    for item in build { 
     buildDefense += item.armor 
     buildDefense += item.shield 
     buildHP += item.HP 
    } 

    let fullHP = baseHP + buildHP 
    var HP = fullHP 
    let defense = baseDefense + buildDefense 
    var numberOfShots = 0 

    while HP > 0 { 
     let perShotDamageRaw: Double = 330 + Double(numberOfShots) * 0.09 * fullHP 
     let mitigatedDamage: Double = 0.09 * perShotDamageRaw + 0.9 * perShotDamageRaw/(100 + defense) * 100 

     HP -= mitigatedDamage 
     numberOfShots += 1 
    } 

    return numberOfShots 
} 

} 

Как получить resultLabel «s значение для изменения в режиме реального времени, тоже?

+0

Всего несколько вещей для вас, чтобы попробовать. 1) Можете ли вы установить значение 'resultLabel.text' в« нормальную »строку в вашем методе? (например, если вы установите значение 'resultLabel.text =" Hello World "', то это работает?) 2) Что возвращает функция 'calculate'? Попробуйте добавить 'print (numberOfShots)' непосредственно перед 'return', чтобы узнать, что такое результат вычисления. – pbodsk

+0

@pbodsk yeah 'resultLabel' может измениться, но' calculate' ничего не возвращает –

+0

OK ... теперь мы знаем, где искать тогда :). Когда вы говорите «ничего не возвращает», вы имеете в виду, что он возвращает 0 или вообще не возвращает ничего (потому что это должно быть правильно? Я имею в виду, вы объявили метод, который, как ожидается, вернет «Int») – pbodsk

ответ

0

Как можно видеть в чате, нам удалось найти проблему.

Этот ответ представляет собой лишь некоторые общие советы и рекомендации по отладке, когда возникает такая проблема.

Исходная задача была:

теперь только изменения HPValue этикетки, то resultLabel не работает.

Позволяет выяснить, в чем проблема. Вот код:

resultLabel.text = String(calculator.calculate()) 

Две вещи могут пойти не так, здесь:

  1. resultLabel не правильно подключен. Чтобы убедиться, что это так, попробуйте установить значение для простой строки ol и посмотрите, можете ли вы это увидеть. Я могу, ну, текстовое поле правильно подключено.

  2. Метод calculate() возвращает неожиданное значение. Попробуйте проверки того, что метод возвращает путем добавления print заявления непосредственно перед return

И как вы можете видеть в чате, как только мы изолированы, где возникла проблема, что проще было @ ярко-будущее для отслеживания вниз проблема.

Надеюсь, что это помогает кому-то, когда они пытаются отладить проблему :)

+0

Отличные советы для всех! –

Смежные вопросы