Setup a GCD timer, the print statement "ABTimer Fired" is being called, but not "ABTimer Fired Block" and I cannot figure out why! Any ideas?
Here is my basic code, comment for clairity:
class ABTimer {
private var timer: DispatchSourceTimer!
/// Creates a timer
@discardableResult
init(fire: Date, interval: TimeInterval, repeats: Bool, block: @escaping (ABTimer) -> Void) {
// Cancels existing timers
timer?.cancel()
// Queue a new timer
let queue = DispatchQueue(label: "com.applebot.timer", attributes: .concurrent)
// Make the timer
timer = DispatchSource.makeTimerSource(queue: queue)
// let i = fire.timeIntervalSince(Date()) // Code for determing fire date
if repeats {
// If repeating, schedule a repeating timer
timer?.schedule(deadline: .now(), repeating: interval, leeway: .milliseconds(100))
} else {
// if not repeating, schedule a non-repeating timer
timer!.schedule(deadline: .now())
}
// Set event handler
timer?.setEventHandler(qos: .background) { [weak self] in
print("\(Date()) >>>> NOTICE: ABTIMER FIRED BLOCK")
guard let ss = self else { return }
block(ss)
}
print("\(Date()) >>>> NOTICE: ABTIMER FIRED")
// Start Timer
timer?.resume()
}
}