Simple and Elegant Timer
δΈζδ»η»οΌζι δΈδΈͺδΌι ηTimer
Compare with NSTimer
- No retain cycle
- Decouple with RunLoop
- Support GCD queue
- Support dynamically changing interval
- Support closure syntax
Usage
single timer
//We need to maintain a strong reference to SwiftTimer. When self dealloc, timer will dealloc too.
self.timer = SwiftTimer(interval: .seconds(2)) {
print("fire")
}
self.timer.start()
repeatic timer
timer = SwiftTimer.repeaticTimer(interval: .seconds(1)) {
print("fire")
}
timer.start()
dynamically changing interval
timer = SwiftTimer.repeaticTimer(interval: .seconds(5)) { timer in
print("doSomething")
}
timer.start() // print doSomething every 5 seconds
func speedUp(timer: SwiftTimer) {
timer.rescheduleRepeating(interval: .seconds(1))
}
speedUp(timer) // print doSomething every 1 second
throttle
The closure will be called after interval you specified. It is invalid to call again in the interval.
SwiftTimer.throttle(interval: .seconds(0.5), identifier: "refresh") {
refresh();
}
debounce
The closure will be called after interval you specified. Calling again in the interval cancels the previous call.
SwiftTimer.debounce(interval: .seconds(0.5), identifier: "search") {
search(inputText)
}
count down timer
timer = SwiftCountDownTimer(interval: .fromSeconds(0.1), times: 10) { timer , leftTimes in
label.text = "\(leftTimes)"
}
timer.start()
Installation
Carthage:
github "100mango/SwiftTimer"