Ios 在Swift中使计时器无效

Ios 在Swift中使计时器无效,ios,swift,timer,Ios,Swift,Timer,我正在尝试在Xcode中创建应用程序。我有一个屏幕,每30秒切换一次标签,在x分钟后,会切换到显示Done!的屏幕!。还有一个返回原始视图的按钮。目前,它在完成x分钟后冻结,不会切换到“完成”状态!屏幕。此外,如果我返回主视图,然后再次尝试生成练习,计时器将倒计时2秒,而不是1秒 这是我的密码。任何提示都将不胜感激 import UIKit var overallTime = minutes * 60 var timeLeft = 30 let resetTime = 30 var newE

我正在尝试在Xcode中创建应用程序。我有一个屏幕,每30秒切换一次标签,在x分钟后,会切换到显示Done!的屏幕!。还有一个返回原始视图的按钮。目前,它在完成x分钟后冻结,不会切换到“完成”状态!屏幕。此外,如果我返回主视图,然后再次尝试生成练习,计时器将倒计时2秒,而不是1秒

这是我的密码。任何提示都将不胜感激

import UIKit

var overallTime = minutes * 60
var timeLeft = 30
let resetTime = 30
var newE = true
var over = false

class ExerciseViewController: UIViewController {


    @IBOutlet weak var time: UILabel!
    @IBOutlet weak var progress: UIProgressView!
    @IBOutlet weak var currExercise: UILabel!

    let exercises = ["crunches", "bicycles", "leg lifts", "left crunches", "right crunches", "left cross crunches", "right cross crunches", "plank",
    "penguins", "wipers", "scissors", "flutter kicks", "right leg climbs", "left leg climbs", "sit ups", "dead bugs", "russian twists", "toe touches",
    "leg lifts with butt bump", "left plank", "right plank", "back plank", "alternating side sit-ups", "butterfly sit ups", "c-curve"]

    var num = 0

    var total = minutes * 2

    var timer: Timer?

    var bigtimer: Timer?

    override func viewDidLoad() {
        super.viewDidLoad()
        resetView()
        // Do any additional setup after loading the view.
        pickExercise()
        self.createTimer()
    }

    func pickExercise() {
        let index = Int.random(in: 0 ..< exercises.count)
        let curr = exercises[index]
        currExercise.text = String(curr)
        updateProgress()
        num += 1
    }

    func updateProgress() {
        let change: Float = Float(num) / Float(total)
        self.progress.progress = change
    }

    func resetView() {
        timer?.invalidate()
        bigtimer?.invalidate()
        timer = nil
        bigtimer = nil
        total = minutes * 2
        num = 0
        timeLeft = resetTime
        overallTime = minutes * 60
    }
}

extension ExerciseViewController {

    @objc func updateTimer() {
        if timeLeft <= 0 {
            timeLeft = resetTime
            time.textColor = UIColor.black
            pickExercise()
            if num > total {
                time.text = ""
            }
            else {
                time.text = String(timeLeft)
            }
        }
        else {
            timeLeft -= 1
            if timeLeft <= 10 {
                time.textColor = UIColor.red
            }
            if num > total {
                time.text = ""
            }
            else {
                time.text = String(timeLeft)
            }
        }

    }

    @objc func updateBigTimer() {
        if overallTime <= 0 {
            resetView()
            performSegue(withIdentifier: "Completed" , sender: self)
        }
        else {
            overallTime -= 1
        }
    }

    func createTimer() {
      // 1
      if timer == nil {
        // 2
        timer = Timer.scheduledTimer(timeInterval: 1.0,
                                     target: self,
                                     selector: #selector(updateTimer),
                                     userInfo: nil,
                                    repeats: true)
      }
        if bigtimer == nil {
            bigtimer = Timer.scheduledTimer(timeInterval: 1.0, target: self,
             selector: #selector(updateBigTimer),
             userInfo: nil,
            repeats: true)
        }
    }
}
导入UIKit
var总时间=分钟*60
var timeLeft=30
让重置时间=30
var newE=true
var over=错误
类ExerciseViewController:UIViewController{
@IBVAR时间:UILabel!
@IBVAR进度:UIProgressView!
@IBVAR练习:UILabel!
让练习=[“仰卧起坐”,“自行车”,“抬腿”,“左仰卧起坐”,“右仰卧起坐”,“左交叉仰卧起坐”,“右交叉仰卧起坐”,“木板”,
“企鹅”,“雨刷”,“剪刀”,“飞踢”,“右腿攀爬”,“左腿攀爬”,“仰卧起坐”,“死虫子”,“俄罗斯扭动”,“脚趾接触”,
“撞屁股抬腿”、“左板”、“右板”、“后板”、“交替侧仰卧起坐”、“蝴蝶仰卧起坐”、“c形曲线”]
var num=0
var总计=分钟*2
变量计时器:计时器?
var bigtimer:计时器?
重写func viewDidLoad(){
super.viewDidLoad()
resetView()
//加载视图后执行任何其他设置。
选择练习()
self.createTimer()
}
func pickExercise(){
让index=Int.random(in:0..

因为第二次初始化“timer”,它将删除第一个计时器的引用,但它将保持第一个计时器在没有引用的情况下运行。

这是我现在已修复的问题。但是,我仍然遇到与以前相同的问题。
if bigtimer == nil {
        timer = Timer.scheduledTimer(timeInterval: 1.0, target: self,
         selector: #selector(updateBigTimer),
         userInfo: nil,
        repeats: true)
    }