如何在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() ,一切都会好的。