32 lines
1.2 KiB
Swift
32 lines
1.2 KiB
Swift
//
|
|
// TimerExtensions.swift
|
|
// EZSwiftExtensions
|
|
//
|
|
// Created by Lucas Farah on 15/07/15.
|
|
// Copyright (c) 2016 Lucas Farah. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
extension Timer {
|
|
/// EZSE: Runs every x seconds, to cancel use: timer.invalidate()
|
|
public static func runThisEvery(seconds: TimeInterval, handler: @escaping (Timer?) -> Void) -> Timer {
|
|
let fireDate = CFAbsoluteTimeGetCurrent()
|
|
let timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, fireDate, seconds, 0, 0, handler)
|
|
CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, CFRunLoopMode.commonModes)
|
|
return timer!
|
|
}
|
|
|
|
/// EZSE: Run function after x seconds
|
|
public static func runThisAfterDelay(seconds: Double, after: @escaping () -> Void) {
|
|
runThisAfterDelay(seconds: seconds, queue: DispatchQueue.main, after: after)
|
|
}
|
|
|
|
//TODO: Make this easier
|
|
/// EZSwiftExtensions - dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)
|
|
public static func runThisAfterDelay(seconds: Double, queue: DispatchQueue, after: @escaping () -> Void) {
|
|
let time = DispatchTime.now() + Double(Int64(seconds * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC)
|
|
queue.asyncAfter(deadline: time, execute: after)
|
|
}
|
|
}
|