在我的应用程序中,我应该使用多个计时器,但我不想为每个函数添加单独的计时器,如何创建一个简化创建多个计时器的函数,我在下面尝试了此代码,它可以工作,但我无法使计时器无效。
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()
}
}
Run Code Online (Sandbox Code Playgroud)
您实际上从未为变量分配新值。您创建的计时器不会保存在任何地方,因此您无法使它们无效。
我建议进行以下更改:
var timer: Timer? {
didSet {
oldValue?.invalidate()
}
}
var timer2: Timer? {
didSet {
oldValue?.invalidate()
}
}
Run Code Online (Sandbox Code Playgroud)
这将确保在分配新计时器时,前一个计时器始终无效。然后,您可以使用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)
}
Run Code Online (Sandbox Code Playgroud)
并按以下方式使用它:
timer = timerWithDifferentIntervals(interval: 1, target: self, selector: #selector(handle1), userInfo: nil, repeats: true)
Run Code Online (Sandbox Code Playgroud)
虽然这个方法现在基本上什么都不做,所以没有必要
| 归档时间: |
|
| 查看次数: |
1999 次 |
| 最近记录: |