使用计时器值更新标签文本

Update Label Text with Timer Values

我知道有很多关于类似问题的答案,但似乎所有答案都不适合我的问题。我是 Swift 的新手,我的脑子里一直在想这些东西。

任务很简单。我有一个 ViewController 和一个名为“TimeIsTicking”的 Class,我在单独的 Swift 文件中定义了它们。我这样做是因为我想用来自 Timer 的数据提供 5 ViewController(嵌套在 TabBarController 中)并且它们都必须 运行“同步”。

函数fireTimer每秒将1的值赋给变量seconds

ViewController 中是一个 Label,我希望每次当计时器为秒设置新值时更新标签。

dayLabelText 获取数据,这里一切正常,但从那时起我就卡住了。标签文本未更新。

我怀疑,必须有一个“循环”来重新加载标签的数据,我认为 fireTimer 中的循环就足够了,但我显然错了。

我尝试了“Observer Thing”和“Dispatchqueue Thing”但我玩得不好((显然)。

不胜感激。

这里是定时器的代码class:

import Foundation
import UIKit

class TimeIsTicking {
    
    var seconds: Int = 0
    
    static let timeFlow = TimeIsTicking()

    func fireTimer() {
        let finance = FinanceVC()
        Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
            self.seconds += 1
            finance.dayLabelText = "\(self.seconds)"
            print("Seconds: ", self.seconds)
            print("LabelText: ", finance.dayLabelText)   
        }
    }  
}

这里是VieWController的代码:

import UIKit

class FinanceVC: UIViewController {
    
    @IBOutlet weak var dayLabel: UILabel!
    
    var dayLabelText = String(TimeIsTicking.timeFlow.seconds)
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        dayLabel.text = dayLabelText

        TimeIsTicking.timeFlow.fireTimer()
  
        }
        // Do any additional setup after loading the view.

}

我看到了几个问题:

  • fireTimer() returns 时,finance 对象超出范围。它将被释放。计时器将在不再存在的视图控制器上设置标签文本。
  • FinanceVC() 实例化 UIViewController 不会在屏幕上显示它。实例化后,您需要明确显示。例如,您可以通过从父视图控制器调用 present(_:animated:completion:) 来执行此操作。
  • 计时器更新 dayLabelText 不更新 dayLabel.text

遵循有关如何显示视图控制器的基本 YT 教程可能会很好。

祝你好运,你很快就会得到它!