2016-09-21 88 views
1

我做一個簡單的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) 

...但仍然沒有工作

那麼,什麼是在計時器分配一個類方法,如選擇的最佳方式初始化?

非常感謝!

回答

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() 
    } 
    
+0

我選擇這個答案的解釋涼爽。謝謝 – gersonmontenegro

0

聲明@objc func onTick()一切都會好的。

+0

謝謝,它的工作與 – gersonmontenegro