Files
2024-09-04 04:26:04 +03:00

70 lines
2.0 KiB
Swift

//
// TimerUtils.swift
// irbis
//
// Created by lan on 08.10.2021.
// Copyright © 2021 ИТСофт. All rights reserved.
//
import Foundation
class TimerControl {
var running: Bool { timer != nil }
private var timer: Timer?
private var ti: TimeInterval
private var repeats: Bool
private var target: Any?
private var selector: Selector?
private(set) var startTime: Date?
init(_ ti: TimeInterval, repeats: Bool = true) {
self.ti = ti
self.repeats = repeats
}
init(_ ti: TimeInterval, repeats: Bool = true, target: Any, selector: Selector) {
self.ti = ti
self.repeats = repeats
self.target = target
self.selector = selector
}
func start(_ block: @escaping (Timer) -> Void) {
stop()
startTime = Date()
timer = Timer.scheduledTimer(withTimeInterval: ti, repeats: repeats, block: block)
}
func start(target : Any, selector : Selector) {
stop()
startTime = Date()
timer = Timer.scheduledTimer(timeInterval: ti, target: target, selector: selector, userInfo: nil, repeats: repeats)
}
func start() {
guard let target = target, let selector = selector else { return }
start(target: target, selector: selector)
}
func stop() {
guard let _ = timer else { return }
startTime = nil
timer?.invalidate()
timer = nil
}
}
extension TimerControl {
static func start(ti: TimeInterval, repeats: Bool, block: @escaping (Timer) -> Void) -> TimerControl {
let timerControl = TimerControl(ti, repeats: repeats)
timerControl.start(block)
return timerControl
}
static func start(ti: TimeInterval, repeats: Bool, target : Any, selector : Selector) -> TimerControl {
let timerControl = TimerControl(ti, repeats: repeats)
timerControl.start(target: target, selector: selector)
return timerControl
}
}