如何初始化Swift中的自定义类中的Timer?
问题描述:
我做一个简单的cronometer的应用程序,但是,现在我想变得更好,我想编写一个类的cronometer控制:如何初始化Swift中的自定义类中的Timer?
class Cronometer{
private var counter:Int = 0
private var timer:Timer = Timer()
private var state:Bool = true
func initCronometer(){
if self.state{
self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: Selector("onTick"), userInfo: nil, repeats: true)
}else{
self.timer.invalidate()
}
self.state = !self.state
}
func onTick(){
self.counter += 1
print(self.counter)
}
}
但它不是类的内部工作与选择参数自定义方法。我不希望它在ViewController中,就像我以前所做的那样。
我尝试用
self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: Selector(("onTick")), userInfo: nil, repeats: true)
和
self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.onTick), userInfo: nil, repeats: true)
...但仍然没有工作
那么,什么是在计时器分配一个类方法,如选择的最佳方式初始化?
非常感谢!
答
Timer
是基础类型NSTimer
, 的覆盖类型,它使用Objective-C消息传递来调用计时器目标。 因此目标方法必须可用于Objective-C。
您有以下选择:
- 马克只有
onTick()
法@objc
(马特已经说过)。 - 使
Cronometer
类成为NSObject
的一个子类。 -
在iOS上10/MacOS的10.12可以使用新的基于块的计时器API:
self.timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in self.onTick() }
我选择这个答案的解释凉爽。谢谢 – gersonmontenegro