【问题标题】:Repeating timer with New Time Intervals具有新时间间隔的重复计时器
【发布时间】:2020-01-12 18:36:59
【问题描述】:

您好,这是我的第一个应用程序,我一直在尝试弄清楚如何完成这个简单的任务,但信息量过大,我觉得可能有更简单的方法来完成它。

我正在尝试构建一个随机单词生成器,它将以随机时间间隔从一组单词中进行选择。计时器触发后,时间需要更改。计时器可以在应用程序打开的整个过程中保持运行。

到目前为止,这是我的代码:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var label: UILabel!
    @objc weak var paraTimer: Timer?

    override func viewDidLoad() {
        super.viewDidLoad()

        let randomNum = Int.random(in: 1..<5)

        paraTimer = Timer.scheduledTimer(timeInterval: TimeInterval(randomNum), target: self, selector: #selector(runTimedCode), userInfo: nil, repeats: true)

   }

/*
This invalidates my timer, not sure if I need to start a new timer now or if I can reset this?
override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    paraTimer?.invalidate()
*/

    @objc func runTimedCode() {

        let array = ["Apple", "Banana", "Pear" ]
        label.text = array.randomElement()


    }
}

所以我需要解决的问题是它会从 1-5 中选择一个随机数,然后不选择一个新数字,而是每隔 x 秒继续运行一次。我还应该使计时器无效还是将其关闭?

谢谢。就像我说的,这是我第一次开发不只是遵循直接教程的应用程序。

【问题讨论】:

    标签: swift random timer


    【解决方案1】:

    要以不同的间隔重新启动计时器,您必须重新创建计时器。

    首先声明定时器strong,不需要@objc

    var paraTimer: Timer?
    

    我建议创建一个额外的方法。声明计时器不重复并使用Timer 的基于块的API。计时器会自行重新启动。

    func restartTimer() {
        let randomNum = Int.random(in: 1..<5)
        paraTimer = Timer.scheduledTimer(timeInterval: TimeInterval(randomNum), repeats: false) { [weak self] _ in
            let array = ["Apple", "Banana", "Pear" ]
            self?.label.text = array.randomElement()
            self?.restartTimer()
        }
    }
    

    viewWillAppear中启动定时器

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        restartTimer()
    }
    

    并在viewDidDisappear停止它

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        paraTimer?.invalidate()
        paraTimer = nil
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-12-17
      相关资源
      最近更新 更多