An NSTimer
wrapper for Swift.
While you can use an NSTimer
with Swift classes, they must inherit from (either directly or indirectly) NSObject
. If you try to use an NSTimer
on a pure Swift class the following error will occur when the timer attempts to fire:-
*** NSForwarding: warning: object 0x9fe0000 of class '_TtC17SwiftTimerExample9PureSwift' does not implement methodSignatureForSelector: -- trouble ahead
Enter NxSwiftTimer
. A lightweight wrapper around NSTimer that can be used on Swift classes that don’t inherit from NSObject
:)
It’s API follows that of NSTimer
so it should be recognisable.
// Non-repeating timer with closure:
NxSwiftTimer.scheduledTimerWithTimeInterval(3.0) {
// Do something
}
// Repeating timer with closure:
NxSwiftTimer.scheduledTimerWithTimeInterval(3.0, userInfo: nil, repeats: true) {
// Do something
}
// Non-repeating timer with function reference on class that doesn't inherit from NSObject
class PureSwift {
var timer: NxSwiftTimer?
func startTimer() {
self.nxTimer = NxSwiftTimer.scheduledTimerWithTimeInterval(3.0, userInfo: nil, repeats: false, closure: self.timerFired)
}
func timerFired() {
println("PureSwift object says timer fired")
}
}