如何在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) } }
但是select器参数不是在类中使用自定义方法。 我不希望它在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初始化器中将类方法指定为select器的最佳方法?
非常感谢!
Timer
是基础typesNSTimer
的叠加types,它使用Objective-C消息传递来调用定时器目标。 因此目标方法必须在Objective-C中可用。
您有以下select:
- 用
@objc
标记onTick()
方法(正如Matt所说的)。 - 使
Cronometer
类成为NSObject
一个子类。 -
在iOS 10 / macOS 10.12上,您可以使用较新的基于块的定时器API:
self.timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in self.onTick() }
声明@objc func onTick()
,一切都会好的。