我制作了一个简单的计时器应用程序,但是,现在我想让它变得更好,我想为计时器控件编写一个类:
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中使用它,就像之前的maded一样。
我尝试
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初始值设定项中将类方法指定为选择器的最佳方法吗?
非常感谢!
答案 0 :(得分:2)
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()
}
答案 1 :(得分:0)
声明@objc func onTick()
,一切都会好的。