2017-06-03 22 views
0

私は迅速です。私のUIには、いくつかのクラスインスタンスの値を表示するラベルがあります。そして、私はそれらのインスタンスの価値を高めるクラスメソッドを持っています。このメソッドを呼び出すと、インスタンスの値は更新されます。 UIのラベルは同じままです。どのようにすれば、このメソッドでもそれらのラベルの数字を更新することができます。あなたはUILabelに更新された値を割り当てる必要がメソッドが変数を変更した後のUIの値を更新する(Swift 3)

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

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

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

はここに私のコードです:

は、ここに私のViewControllerコードです。ベスト・プラクティスとして、メイン・スレッドで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

答えをありがとう。単に "displayValue.text =" \(newNumber.value) "と書くだけでなく、" DispatchQueue.main.async "を使用する目的が何であるか尋ねることもできますか?@ CoderFrom94 –

+0

@HazarPanc、displayValueラベルを更新する予定です。 UIアップデートはメインスレッドでのみ作成しなければなりません。また、 'Thread.isMainThread'を使ってメインスレッドに入っているかどうかを確認することもできます。' DispatchQueue.main.async'はmain現在のスレッドがメインではない場合でも、 – CoderFrom94

関連する問題