如何初始化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() 
    } 
    
+0

我选择这个答案的解释凉爽。谢谢 – gersonmontenegro

声明@objc func onTick()一切都会好的。

+0

谢谢,它的工作与 – gersonmontenegro