具有自动内存管理功能的直观 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.TimerAPI 以实现更复杂的用例
  • 易于扩展
  • 经过单元测试

安装

斯威夫特包管理器

  1. 单击文件 → Swift 包 → 添加包依赖项。
  2. 进入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 – 轻松创建任何复杂程度的日期和日期组件(例如“下个月的第一个星期四”)

GitHub

查看 Github