如何在Swift上计算Timer

时间:2018-03-02 15:36:40

标签: swift timer

我是swift的新手,我试图制作一个Timer。它通常应该计算秒数并在调试器中打印它们。

我试过了:

var timer = Timer() 

@IBAction func killTimer(_ sender: AnyObject) {
    timer.invalidate()         
}

@objc func processTimer() {
    print("This is a second")
}

override func viewDidLoad() {
    super.viewDidLoad()

    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.processTimer), userInfo: nil, repeats: true)
}

我不知道计时器如何计算秒数。使用此代码我收到一条失败消息:

@objc func processTimer() {
    print("This is second \(Timer + 1)")
}

感谢您的帮助。 甲

3 个答案:

答案 0 :(得分:1)

您需要一个计数器变量,每次计时器触发时它都会递增。

将变量Timer声明为可选,以使计时器可靠地无效(仅一次)。

var timer : Timer?
var counter = 0 

@IBAction func killTimer(_ sender: AnyObject) {
   timer?.invalidate()
   timer = nil
}

@objc func prozessTimer() {
    counter += 1
    print("This is a second ", counter)

}

override func viewDidLoad() {
    super.viewDidLoad()  
    timer = Timer.scheduledTimer(timeInterval:1, target:self, selector:#selector(prozessTimer), userInfo: nil, repeats: true)

}

答案 1 :(得分:0)

您需要启动计时器,您只需在代码中初始化它,以便在viewDidLoad中添加

timer.fire()

我不确定您要打印什么,但如果它是时间戳,那么您可以为您的班级添加属性

let formatter = DateFormatter()

并将其配置为以秒和毫秒显示时间

formatter.dateFormat = "ss.SSS" //in viewDidLoad

并在您的打印声明中使用它

print("This is a second \(formatter.string(from(Date())")

答案 2 :(得分:-1)

如果你想打印通过的时间使用它(如果那是你想要的):

print("time passed: \(Date().timeIntervalSince1970 - timer.fireDate.timeIntervalSince1970)")