返回视图时Swift Timer不会重新启动

Posted

技术标签:

【中文标题】返回视图时Swift Timer不会重新启动【英文标题】:Swift Timer not restart when back to the view 【发布时间】:2021-08-23 04:44:33 【问题描述】:

我想检查我的计时器是否仍在运行,因为当我离开视图并返回时,我希望计时器仍在运行而不是重置。我试试这个还是失败了

if otpViewModel.timer == nil 
        otpViewModel.timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(onTimerFires), userInfo: nil, repeats: true)
    else if otpViewModel.timer != nil 
        otpViewModel.timer?.invalidate()
        otpViewModel.timer = nil
        countDownLabel.isHidden = true
        resendButton.isHidden = false
    

 @objc func onTimerFires()

    otpViewModel.timeLeft -= 1
    //resendBtn.isHidden = true
    if otpViewModel.timeLeft <= 0 
        if otpViewModel.minutes == 1 
            otpViewModel.minutes = 0
            otpViewModel.timeLeft = 60
        
        else 
            otpViewModel.timer?.invalidate()
            otpViewModel.timer = nil
            countDownLabel.isHidden = true
            resendButton.isHidden = false
        
    
    if otpViewModel.minutes == 1 
        switch otpViewModel.otpMethod 
        case .SMS:
            countDownLabel.text = "SMS dikirim ulang dalam \(otpViewModel.minutes) : \(otpViewModel.timeLeft) detik"
        case .WHATSAPP:
            countDownLabel.text = "WhatsApp dikirim ulang dalam \(otpViewModel.minutes) : \(otpViewModel.timeLeft) detik"
        default:
            print("none")
        
     else 
        switch otpViewModel.otpMethod 
        case .SMS:
            countDownLabel.text = "SMS dikirim ulang dalam \(otpViewModel.minutes) : \(otpViewModel.timeLeft) detik"
        case .WHATSAPP:
            countDownLabel.text = "WhatsApp dikirim ulang dalam \(otpViewModel.minutes) : \(otpViewModel.timeLeft) detik"
        default:
            print("none")
        
    

我尝试了这个,但仍然无法正常工作,每当我离开视图并返回视图时,我的计时器都会重置

【问题讨论】:

else if otpViewModel.timer != nil 只做 else 当前视图控制器离开时使用Date保存当前日期和时间。 @aheze 我不明白我的 else if 上的“just do”是什么意思? @afipermana 将 else if otpViewModel.timer != nil 替换为 else 。它们都是一样的,因为在你做if otpViewModel.timer == nil ...之前。但这只是一般性建议 - 您的问题可能出在其他地方。 @aheze 是的,还是不行,伙计 【参考方案1】:

我猜当你离开你的视图控制器时计时器会被重置,因为你在viewDidLoad 中设置了你的计时器,一旦你离开你的ViewController,所有的东西都会从内存中清除。然后当你再次打开ViewController时,它会被加载到内存中,一旦你离开ViewController,一切都会再次被清除。

【讨论】:

以上是关于返回视图时Swift Timer不会重新启动的主要内容,如果未能解决你的问题,请参考以下文章

iCloud 同步后 UITableView 不会重新加载(Swift 2)

如何在 SwiftUI 中实现 MVVM 模式?视图不会重新渲染

带有 fetchedResultsController 的 Tableview 在应用重新启动或视图重新加载之前不会更新新内容

SwiftUI:取消定时器后如何重新启动它?

集合视图不会重新加载(Swift)

Swift:在警报视图中按下按钮后,tableView 不会重新加载数据