PDKTimer 0.0.5

PDKTimer 0.0.5

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最后发布2015年7月
SPM支持 SPM

Daniel García 维护。



PDKTimer 0.0.5

PDKTimer

一个简单的基于 GCD 的 Swift 定时器

为什么?

既然我们已经有 NSTimer,为什么还需要新的定时器?

NSTimer 是一个 Objective-C 类,需要调用 @selector。在 Swift 中,我们没有选择器,我们必须传递一个包含要调用的函数名称的 String,类似于下面这样

let timer = NSTimer(timeInterval: 0.5, target: self, selector: "myfunction", userInfo: nil, repeats: false)

哎呀!

问题在于,“myfunction”字符串将在运行时进行评估。这意味着如果我们输入了函数名称的拼写错误,编译器将无法通知我们代码将不会执行。

如果没有办法向定时器传递一个闭包该多好?

如何使用它

使用 PDKTimer 非常简单。只需调用

let timer = PDKTimer(timeInterval: 5.0, repeats: true){
    // do something
}

并且这个闭包将每 5 秒执行一次

注意(调度)

PDKTimer 实例不自动调度。您必须手动调用 schedule 才能启动。

let timer = PDKTimer(timeInterval: 5.0, repeats: true){
    // do something
}
timer.schedule()

基于 GCD

PDKTimer 是使用 GCD API 实现的。它不是使用内部 NSTimer 的 Swift 包装器。这允许在后台队列中执行定时器,还可以在特定的 dispatch queue 上分派定时闭包。只需使用以下方式创建您的定时器

let dispatchQueue = dispatch_queue_create("com.produkt.pdktimer.test", DISPATCH_QUEUE_SERIAL)
PDKTimer(timeInterval: 0.5, repeats: false, dispatchQueue: dispatchQueue){
    // do something
}

然后您的闭包将在您的自定义队列上执行

语法糖

我真的很喜欢 SwiftyTimer API,它是 radex 提供的,这是对 NSTimer 的 Swift 包装器。因此,我采用了他建议的 API。

您可以使用 PDKTimer.everyPDKTimer.after 快捷初始化器创建重复和一次性定时器

PDKTimer.every(5.seconds){
    // executes every 5 seconds
}

PDKTimer.after(5.seconds){
    // waits 5 seconds and then executes once
}

还定义了一个 Double 扩展,您可以使用类似 Ruby-on-Rails 辅助工具定义时间间隔

500.milliseconds
1.second
2.5.seconds
5.seconds
10.minutes
1.hour

注意(调度):

PDKTimer 简写初始化器会自动安排。所以你不需要手动调用安排。

PDKTimer.every(5.seconds){

}
// no scheduling needed

作者

丹尼尔·加西亚

https://github.com/fillito https://github.com/Produkt

感谢

感谢 Javi Soto 为编写 MSWeakTimer 做的贡献。这帮助我很好地理解了一些GCD API来实现计时器。

感谢 Radek Pietruszewski 为设计 SwiftyTimer API所做的贡献,我从那里借鉴了很多。