如何在Swift中的自定义类中初始化Timer?

时间:2016-09-21 17:14:35

标签: ios swift timer swift3

我制作了一个简单的计时器应用程序,但是,现在我想让它变得更好,我想为计时器控件编写一个类:

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初始值设定项中将类方法指定为选择器的最佳方法吗?

非常感谢!

2 个答案:

答案 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(),一切都会好的。