具有自动内存管理功能的直观 Swift 计时器
定时器
具有自动内存管理功能的直观 Swift 计时器
Timers是一个轻量级包,它提供了一种在 Swift 中处理和管理计时器的便捷方法,特别是在视图控制器中自动管理计时器的生命周期。
import Timers
final class RefreshingViewController: UIViewController {
let timers = Timers()
func viewDidLoad() {
super.viewDidLoad()
timers.addRepeating(timeInterval: 1.0, withTarget: self) { (self) in
self.reloadData()
}
}
func reloadData() {
// reload your data here
}
}
当视图控制器被取消初始化时,计时器负责使计时器失效,从而无需手动执行此操作。
注意 帮助拯救乌克兰。通过乌克兰总统的官方筹款平台United24 捐款
特征
- 自动管理定时器的生命周期:无需担心内存泄漏
- 重复定时器
- 一次性定时器
- 在特定日期触发然后以设定的时间间隔重复的计时器
- 完全访问
Foundation.Timer
API 以实现更复杂的用例 - 易于扩展
- 经过单元测试
安装
斯威夫特包管理器
- 单击文件 → Swift 包 → 添加包依赖项。
- 进入
https://github.com/dreymonde/Timers.git
注意 Timers是一个非常简单的库,仅包含一个文件 (Timers.swift)。不要期待更新,此版本可能是最终版本。如果您需要其他功能,请随意将 Timers.swift 直接分叉或复制到您的项目中并进行扩展。也欢迎 PR。
指导
所有这些计时器均由实例管理,并在实例释放
Timers
时自动失效。Timers
创建一个基本的重复计时器
import Timers
final class MyViewController: UIViewController {
let timers = Timers()
override func viewDidLoad() {
super.viewDidLoad()
timers.addRepeating(timeInterval: 1.0, withTarget: self) { (self, timer) in
self.reloadData()
}
}
func reloadData() {
// reload your data here
}
}
创建具有容差的重复计时器
timers.addRepeating(timeInterval: 1.0, tolerance: 0.1, withTarget: self) { (self) in
self.reloadData()
}
在这种情况下,计时器将有 0.1 秒的轻微容差,允许系统调整计时器的触发以获得更好的系统性能。
创建一个在特定日期触发一次的计时器
let date = Date().addingTimeInterval(5) // Date 5 seconds from now
timers.fireAt(date, withTarget: self) { (self) in
self.reloadData()
}
// or:
timers.fireAfter(timeInterval: 5, withTarget: self) { (self) in
self.reloadData()
}
创建一个在特定日期触发并以设定的时间间隔重复的计时器
timers.addRepeating(
initiallyFireAt: Date().addingTimeInterval(10),
thenRepeatWithInterval: 5.0,
withTarget: self
) { (self, timer) in
self.reloadData()
}
手动创建计时器
对于想要手动添加计时器的更自定义用例:
let customTimer = Timer(timeInterval: 1.0, repeats: true) { _ in
print("This is a custom timer")
}
timers.addTimerManually(timer: customTimer)
清除所有计时器
在任何时候,如果您想停止并使所有计时器无效,您可以调用:
timers.clear()
也可以看看
- Time by @dreymonde – Swift 中的类型安全时间计算,由泛型提供支持
- DateBuilder by @dreymonde – 轻松创建任何复杂程度的日期和日期组件(例如“下个月的第一个星期四”)