Swift NSTimerの使い方のポイント

scheduledTimerWithTimeInterval(ti: NSTimeInterval, target: AnyObject, selector: Selector, userInfo: AnyObject?, repeats: Bool)

ポイント

  • target
    • 指定するオブジェクトは、NSObjectを継承しているか、@objcのついたクラスである必要がある
  • selector
    • Selector("onUpdate:")でもよいし、"onUpdate:"でもよい
      • コロンは省略不可(引数が一つあることを表す)
    • メソッド名はなんでも良い
    • 引数はtimer: NSTimerでなければならない
    • 戻り値は自由

サンプルコード1

class AnswerTimer: NSObject {
    init() {
        super.init()
        NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("onUpdate:"), userInfo: nil, repeats: true)
    }

    func onUpdate(timer: NSTimer) {
    }
}

スポンサーリンク


サンプルコード2

@objc
class AnswerTimer {
    init() {
        NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("onUpdate:"), userInfo: nil, repeats: true)
    }

    func onUpdate(timer: NSTimer) {
    }
}

エラーメッセージ

上記のポイントが満たされていないと下記のようなエラーが出る

2014-11-23 10:13:12.623 MyApp[7959:894999] *** NSForwarding: warning: object 0x78e5d4f0 of class 'MyApp.AnswerTimer' does not implement methodSignatureForSelector: -- trouble ahead
Unrecognized selector -[MyApp.AnswerTimer onUpdate:]

スポンサーリンク


おすすめツール

meyasuba.co