2016-09-21 19 views
1

私はシンプルcronometerアプリを作る、しかし、今、私はそれを改善する必要、と私はcronometer制御のためのクラスを記述したいと思います:Swiftでカスタムクラスの中でタイマーを初期化する方法は?

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は、Objective-Cメッセージングを使用してタイマーターゲットを呼び出すFoundationタイプNSTimer, のオーバーレイタイプです。 したがって、Objective-Cでターゲットメソッドを使用できるようにする必要があります。

  • マーク(マットはすでに言ったように)@objcでのみonTick()方法:

    は、次のオプションがあります。

  • 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

関連する問題