【Swift】UItextの中身を都度更新したい
Swiftを個人で勉強しており詰まってしまったので質問させてください
下記のソースコードで3のつく数字と3の倍数だけ漢数字に変換するメソッド(countメソッド)を作成し、viewDidLoadメソッド内でUIlabelのtextに対しcountメソッドをfor文で呼び出し、都度画面に結果を表示させる処理を実装したいです
困っていること
最後に処理された結果である100は画面に表示されるがそれまでに値が画面に表示されない
やりたいこと
画面に都度結果を表示させたい
コンソールではやりたいことをできていることは確認済み
Swift
1import UIKit 2 3class ViewController: UIViewController { 4 @IBOutlet weak var label: UILabel! 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 //ここの呼び出し方が不明 9 for number in 1...100 { 10 Thread.sleep(forTimeInterval: 0.5) 11 //print(count(number: number)) 12 label.text = count(number: number) 13 } 14 } 15 16 func count(number: Int) -> String { 17 let formatter = NumberFormatter() 18 formatter.numberStyle = .spellOut 19 formatter.locale = .init(identifier: "ja-JP") 20 21 if number % 3 == 0 || String(number).contains("3"){ 22 if let string = formatter.string(from: NSNumber(value: number)){ 23 return string 24 } 25 }else{ 26 return String(number) 27 } 28 29 return "" 30 } 31 32 33}
ご回答お待ちしておりますm(_ _)m
メインスレッドを sleep などで停止すると、その間 UI が更新されずユーザーからはフリーズしたように見えるので、時間がかかる処理はバックうラウンドスレッドで実行して UI の更新だけメインスレッドに処理を投げるなどする必要があります。
ユーザー視点でのご指摘ありがとうございます!
質問とは異なるので箇所なので仮の対応として該当の処理は削除致します
ごめんなさい、書き方が悪かったようですが、UI が実際に更新されるのは OS にメインスレッドの処理を戻したときなので、viewDidLoad などから return しない限り UI は更新されないという意味です。
Thread.sleepの指摘かと勘違いしてしまいました すみません
>UI が実際に更新されるのは OS にメインスレッドの処理を戻したとき
つまりviewDidLoad内でいくら値を更新しても処理が継続している時はUIは更新されないということですね
returnの仕方を検討してみます
回答2件
あなたの回答
tips
プレビュー