【问题标题】:Error in Swift 5 with Xcode when creating a timer out of a label从标签创建计时器时,使用 Xcode 的 Swift 5 出错
【发布时间】:2020-01-04 21:22:51
【问题描述】:

我在 Xcode 中使用 Swift 5 来​​编写应用程序。在一个视图控制器上,我正在创建一个计时器,它从 20 分钟倒数到 0。我有我认为是成功的代码,但它会返回一个错误。在行中

timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(SkippingViewController.updateTimer), userInfo: nil, repeats: true)

它给出了一个错误,说 Type 'SkippingViewController' has no member 'updateTimer'(SkippingViewController 是我的计时器所在应用程序页面的视图控制器的名称) 我该如何解决这个问题?

import UIKit

class SkippingViewController: UIViewController {

    @IBOutlet weak var timeLabel: UILabel!

    @IBOutlet weak var startWorkoutButton: UIButton!

    @IBOutlet weak var pauseWorkoutButton: UIButton!

    var timer = Timer()
    var counter = 20.00
    var isRunning = false

    override func viewDidLoad() {
        super.viewDidLoad()


        timeLabel.text = "\(counter)"
        startWorkoutButton.isEnabled = true
        pauseWorkoutButton.isEnabled = false
        // Do any additional setup after loading the view.
    }

    @IBAction func startWorkoutButtonDidTouch(_ sender: Any) {

        if !isRunning {
            timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(SkippingViewController.updateTimer), userInfo: nil, repeats: true)

            startWorkoutButton.isEnabled = false
            pauseWorkoutButton.isEnabled = true
            isRunning = true
        }

    }

    @IBAction func pauseWorkoutButtonDidTouch(_ sender: Any) {

        func updateTimer() {
            counter -= 0.01
            timeLabel.text = String(format: "%.01f", counter)
        }


    }
}

【问题讨论】:

  • 已经给出了解决方案,但无论如何,这段代码编译起来很奇怪。你应该看到这个编译错误'Type 'SkippingViewController' has no member 'updateTimer''

标签: swift xcode uibutton uilabel


【解决方案1】:

您的问题是,SkippingViewController.swift 中没有名为“updateTimer”的方法。您错误地将方法放入方法“pauseWorkoutButtonDidTouch”中。为了解决错误,将以下代码插入 SkippingViewController.swift:

@objc func updateTimer() { 
    counter -= 0.01
    timeLabel.text = String(format: "%.01f", counter)
}

【讨论】:

  • 这个字符串格式应该做什么?这只会显示小数点后 1 位。如果您想要 1 个小数位,请使用 "%.1f"0 是不必要的。如果您打算显示两位小数,则需要为"%.2f"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多