我正在构建一个经过时间的计时器,而代码没有错误,计时器无法启动。
我正在使用两个ViewControllers,一个名为Stopwatch,它在Stopwatch()类下面有一个启动停止功能,然后是一个常规的ViewController,其余的都在其中。
查看控制器代码:
import UIKit
class ViewController: UIViewController {
let watch = Stopwatch()
@IBOutlet weak var elapsedTimeLabel: UILabel!
@IBAction func startButton(_ sender: Any) {
Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.updateElapsedTimeLabel), userInfo: nil, repeats: true)
watch.start()
}
@IBAction func stopButton(_ sender: Any) {
watch.stop()
}
@objc func updateElapsedTimeLabel (timer : Timer) {
if watch.isRunning {
let minutes = Int (watch.elapsedTime/60)
let seconds = watch.elapsedTime.truncatingRemainder(dividingBy: 60)
let tenOfSeconds = (watch.elapsedTime * 10).truncatingRemainder(dividingBy: 10)
elapsedTimeLabel.text = String (format: "%02d:%02d:%02d", minutes, seconds, tenOfSeconds)
} else {
timer.invalidate()
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override var prefersStatusBarHidden: Bool {
return true
}
}
秒表视图控制器代码:
import Foundation
class Stopwatch {
private var startTime : Date?
var elapsedTime: TimeInterval {
if let startTime = self.startTime {
return -startTime.timeIntervalSinceNow
} else {
return 0
}
}
var isRunning: Bool {
return startTime != nil
}
func start() {
startTime = Date()
}
func stop() {
startTime = nil
}
}
调试窗口中根本没有任何内容,所以不确定问题是什么,我一遍又一遍地重新连接按钮,所以不是这样。我也没有在上面提到的代码中得到任何其他错误。
任何人都可以对此有所了解。也许我使用了错误的#selector或者我正在执行updateElapsedTimeLabel分钟,秒,十分之一秒计算错误。不确定。谢谢你看看。
答案 0 :(得分:1)
如果您按住Option键并单击seconds
和tenOfSeconds
,您会发现其中一个类型为TimeInterval
(即Double
),另一个类型为{{1} }}。所以Double
的格式说明符错了。在C中,格式说明符和参数之间的不匹配是未定义的行为。斯威夫特并没有说它是如何处理的,但我想它会忽略这个论点。
要解决此问题,请将最后2个组件的格式说明符更改为%02d
:
%02.f
但为什么不使用let minutes = Int(watch.elapsedTime/60)
let seconds = watch.elapsedTime.truncatingRemainder(dividingBy: 60)
let tenOfSeconds = (watch.elapsedTime * 100).truncatingRemainder(dividingBy: 100) // fixed the math here
elapsedTimeLabel.text = String(format: "%02d:%02.f:%02.f", minutes, seconds, tenOfSeconds)
来简化你的生活:
DateFormatter