我在Swift中创建了一个练习项目,以了解class ApplicationController < ActionController::Base
#...
private
def current_ability
@current_ability ||= Ability.new(current_user, request. original_url)
end
end
的工作原理。启动计时器有一个按钮,一个按钮使计时器无效。当我点击每个按钮一次时,它工作正常。但是,当我多次点击开始计时器按钮时,我无法再使其无效。
这是我的代码:
NSTimer
我已经看到了这些问题,但我无法从他们那里收到我的问题的答案(许多人已经过了class ViewController: UIViewController {
var counter = 0
var timer = NSTimer()
@IBOutlet weak var label: UILabel!
@IBAction func startTimerButtonTapped(sender: UIButton) {
timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: "update", userInfo: nil, repeats: true)
}
@IBAction func cancelTimerButtonTapped(sender: UIButton) {
timer.invalidate()
}
func update() {
++counter
label.text = "\(counter)"
}
}
Obj-C
天而且其他人的问题也不同了):
答案 0 :(得分:5)
如果您想在每次&#34;开始时重置计时器,您可以在timer.invalidate()
中启动新计时器之前添加startTimerButtonTapped
。点击按钮:
@IBAction func startTimerButtonTapped(sender: UIButton) {
timer.invalidate()
timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: "update", userInfo: nil, repeats: true)
}
我打算用解释进行更新,但@jcaron已经在评论中做了,所以我只是引用他的文字,不需要改变它:
每次点击&#34;启动计时器&#34;按钮,你创建一个新的计时器,同时让前一个计时器继续运行,但没有引用它(因为你用你刚刚创建的新计时器覆盖了
timer
)。在创建新文件之前,您需要使之前的文件无效。
答案 1 :(得分:0)
我建议您按下取消按钮时将计时器设置为nil。 并且不要忘记设置counter = 0 使定时器无效时。