首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用新的时间间隔重复计时器

用新的时间间隔重复计时器
EN

Stack Overflow用户
提问于 2020-01-13 02:37:00
回答 1查看 407关注 0票数 1

嗨,这是我的第一个应用程序,我一直在试图弄清楚如何做这个简单的任务,但我变得信息过载,我有一种感觉,可能会有一个更简单的方法来做。

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

到目前为止,我的代码如下:

代码语言:javascript
复制
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秒运行一次。另外,我应该使计时器无效还是将其关闭?

谢谢。就像我说的,这是我第一次开发一款不遵循简单教程的应用程序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-13 02:56:33

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

首先,声明计时器是强的,不需要@objc

代码语言:javascript
复制
var paraTimer: Timer?

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

代码语言:javascript
复制
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中启动计时器

代码语言:javascript
复制
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    restartTimer()
}

并在viewDidDisappear中停止它

代码语言:javascript
复制
override func viewDidDisappear(_ animated: Bool) {
    super.viewDidDisappear(animated)
    paraTimer?.invalidate()
    paraTimer = nil
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59706972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档