[英]Can't invalidate timer swift
在我的應用程序中,我應該使用多個計時器,但是我不想為每個功能添加單獨的計時器,我如何創建一個簡化創建多個計時器的功能,我在下面嘗試了此代碼,它可以正常工作,但是我不能使計時器無效。
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var first: UILabel!
@IBOutlet weak var second: UILabel!
var count = 0
var count2 = 0
var timer = Timer()
var timer2 = Timer()
override func viewDidLoad() {
super.viewDidLoad()
timerWithDifferentIntervals(myTimer: timer, interval: 1, target: self, selector: #selector(handle1), userInfo: nil, repeats: true)
timerWithDifferentIntervals(myTimer: timer2, interval: 1/6, target: self, selector: #selector(handle2), userInfo: nil, repeats: true)
}
func handle1() {
count += 1
first.text = "\(count)"
}
func handle2() {
count2 += 1
second.text = "\(count2)"
}
func timerWithDifferentIntervals(myTimer: Timer, interval: TimeInterval, target: Any, selector: Selector, userInfo: Any?, repeats: Bool) {
var timers = myTimer
timers = Timer.scheduledTimer(timeInterval: interval, target: target, selector: selector, userInfo: userInfo, repeats: repeats)
}
@IBAction func stop(_ sender: UIButton) {
timer.invalidate()
timer2.invalidate()
}
}
您實際上從未為變量分配新值。 您創建的計時器不會保存在任何地方,因此您不能使它們無效。
我建議進行以下更改:
var timer: Timer? {
didSet {
oldValue?.invalidate()
}
}
var timer2: Timer? {
didSet {
oldValue?.invalidate()
}
}
這將確保在分配新計時器時,先前的計時器始終無效。 然后可以使用timer = nil
或timer2 = nil
來使它們無效。
另外,您應該從方法中返回計時器:
func timerWithDifferentIntervals(interval: TimeInterval, target: Any, selector: Selector, userInfo: Any?, repeats: Bool) -> Timer {
return Timer.scheduledTimer(timeInterval: interval, target: target, selector: selector, userInfo: userInfo, repeats: repeats)
}
並以以下方式使用它:
timer = timerWithDifferentIntervals(interval: 1, target: self, selector: #selector(handle1), userInfo: nil, repeats: true)
盡管該方法現在基本上不執行任何操作,所以沒有必要
在數組中添加NStimers,每個計時器都有自己的標簽。
然后,無論何時要使計時器無效,都可以通過數組訪問它並使它無效。
希望這可以幫助!
我在想您應該使用以下代碼來創建和使計時器無效
var timer : NSTimer?
func startTimer(_ timeInterval: Int, _ isRepeat: Bool)
{
if timer == nil {
timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval, target: self, selector: "timerFired", userInfo: nil, repeats: isRepeat)
}
}
func stopTimer()
{
if timer != nil {
timer!.invalidate()
timer = nil
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.