2016-11-10 56 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的價值實時變化,太?

+0

只有幾件事情你可以嘗試。 1)你可以在你的方法中將'resultLabel.text'的值設置爲一個「普通」字符串嗎? (例如,如果將該值設置爲'resultLabel.text =「Hello World」',那麼這是否有效?)2)您的'calculate'函數返回什麼?嘗試在'return'之前添加一個'print(numberOfShots)'來查看'calculate'的結果是什麼。 – pbodsk

+0

@pbodsk yeah'resultLabel'可以改變,但'calculate'不會返回任何東西 –

+0

好的......現在我們知道在哪裏看那麼:)。當你說「不返回任何東西」時,你的意思是它返回0還是不返回任何東西?(因爲它應該是正確的?我的意思是,你已經聲明瞭一個方法,預期返回一個'Int' ) – pbodsk

回答

0

從聊天中可以看出,我們設法找到了問題。

這個答案只是一些常見的調試技巧和竅門,當出現這樣的問題時。

原來的問題是:

現在只有HPValue標籤的變化,resultLabel不起作用。

讓我們找出問題所在。下面的代碼:

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

有兩件事情可以去錯在這裏:

  1. resultLabel不正確接線。要查看是否屬於這種情況,請嘗試將該值設置爲普通ol字符串,然後查看是否可以看到該字符串。我可以,那麼,文本框連接正確。

  2. calculate()方法返回一個意外的值。嘗試驗證什麼僅由return

之前,你可以在聊天看到的,一旦我們會孤立發生時的問題是容易@光明的將來跟蹤添加print聲明的方法返回解決這個問題。

希望這可以幫助任何人,當他們試圖調試一個問題:)

+0

給大家的好貼士! –