2017-06-03 33 views
0

我是新來的swift。在我的UI上,我有標籤顯示一些類實例的值。而且,我有一個增加這些實例的值的類方法。在我調用這個方法之後,我的實例值會更新;但用戶界面上的標籤保持不變。我怎樣才能讓這個方法在這些標籤中更新我的號碼。在方法對變量進行更改後更新UI上的值(Swift 3)

這裏是我的ViewController代碼:

@IBOutlet weak var displayValue: UILabel! //this is the label that displays newNumber's value 

override func viewDidLoad() { 
    super.viewDidLoad() 
    dispValue.text = String("\(newNumber.value))") 
} 

這裏是我的代碼:

class MyNumbers { 
    var value = 50 

    func increaseValue(by: Int){ 
     value += by 
    } 
} 

var newNumber = myNumbers() 
newNumber.increaseValue(by: 5) //This does increase newNumber's value to 55 
//but my label on my UI remains as 50 

回答

0

您需要分配更新值到的UILabel。作爲最佳實踐,始終確保您正在調用主線程中的UI更改,並在進行UI更新時更新AutoLayouts。

替換:

newNumber.increaseValue(by: 5) 

有了:

DispatchQueue.main.async { 
    newNumber.increaseValue(by: 5) 
    self.displayValue.text = "\(newNumber.value)" 
    self.view.layoutIfNeeded() 
} 
+0

讓我知道這不工作或滿足您的需求。如果你清楚,請接受答案。謝謝:) – CoderFrom94

+0

謝謝你的答案。我也可以問使用「DispatchQueue.main.async」的目的是什麼,而不僅僅是寫「displayValue.text =」\(newNumber.value)「?@ CoderFrom94 –

+0

@HazarPanc,我們期待更新displayValue標籤,這樣做是一個UI更新,UI更新必須只在主線程中完成,你也可以使用'Thread.isMainThread'來檢查你是否已經在主線程中,'DispatchQueue.main.async'將執行main即使當前線程不是主線程也是如此。 – CoderFrom94