什么是 Kron?
Kron 是一个 NSTimer 管理器,通过一个统一的 API 提供了 4 种模式。Kron 负责处理 NSTimer 的实现,同时确保无需额外努力即可进行适当的内存管理。
Kron.debounce
:立即调用并在超时时间过去之前拒绝调用Kron.debounceLast
:类似于debounce
,但在超时后也会执行最后的调用Kron.idle
:在超时时间内未被调用后,执行最后的调用Kron.watchdog
:类似于idle
,但可以通过watchDogCancel
取消
为什么选择 Kron?
-
与返回定时器对象不同,Kron 通过一个 [
KronKey
:Timer
] 字典来内部管理定时器实例,这使得从远处组件或线程调用定时器变得容易。 -
KronKey
可以是一个String
结构体或AnyObject
实例。如果传递了一个对象,键值会从对象的指针推导出来。使用相同的键值调用方法会导致所有定时器模式重置。 -
由于旨在从远处的实现方便调用 Kron,您可以选择传递一个上下文值
ctx
。上下文可以是Any
结构体或类实例,它会内部以弱引用的形式包裹,以防止循环引用。然后,上下文被可选地传递到超时闭包。
代码示例
Kron.idle(1, key:"updateUI"){ (key,ctx) in
//
}
let context = 'userTap'
Kron.idle(1, key:"updateUI", ctx: context){ (key,ctx) in
print(ctx as! String) // userTap
}
//self.currentModel should be an AnyObject instance
Kron.idle(1, key:self.currentModel){ (key,ctx) in
expectation2.fulfill()
}
文档
使用jazzy生成且托管在GitHub的文档,请在此查看
CocoaPods
如果您使用[CocoaPods][]来管理依赖项,只需将Kron添加到您的Podfile
pod 'kron', '~> 1.2'
更多示例
请查看测试单元以获取全面的实现示例。
在所有情况下,只需通过调用相同的键调用Kron即可重置定时器。(见下文静态 vs 实例
以了解更多关于静态键空间的信息)
- 空闲定时器
Kron.idle(1, key:"keyStrokes"){ (key,ctx) in
print("performed after 1 second of inactivity")
}
- 防抖器
Kron.debounce(1, key:"Scroll"){ (key,ctx) in
print("performed immediately and again no sooner than 1 second")
}
- 防抖和执行最后
Kron.debounceLast(1, key:"Scroll"){ (key,ctx) in
print("performed immediately and again no sooner than 1 second")
print("also performs the last call after 1 second of inactivity")
}
- 看门狗
Kron.wachtDog(10, key:"ApiResponse"){ (key,ctx) in
print("performed after 10 seconds unless canceled")
}
...
// Called somewhere else to abort the timeOut
Kron.wachtDogCancel("ApiResponse")
静态 vs 实例
您可以使用提供的静态函数。内部 Kron 管理了4个单例以防止不同模式之间的键冲突
//Debouncer
Kron.debounce
//Debouncing Last
Kron.debounceLast
//Idle
Kron.idle
//Watchdog
Kron.watchdog
您还可以选择实例化 Kron 以在该实例中管理自己的键空间。
let myKron = Kron()
myKron( ...
有疑问?
如果您需要任何帮助,请访问我们的GitHub问题表。如果您在档案中找不到任何解决方案,请随时提交问题。
您也可以通过
关于
克朗(Kron)最初由哈桑·古伊奥斯提亚古伊(Hassan Uriostegui)构建,是一个Objective-C框架。现在作为基于Swift的开源框架在伊欧弗卢克斯(Eonflux)集体下发布。查看我们的其他项目并加入我们的创新之流(eon flux of innovation)!