测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布上次发布 | 2017年6月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Alex Nikishin 维护。
#RunIt
RunIt 是一个超级轻量级但功能强大的系统组件管理器。它可以帮助您从代码中删除不必要的单例使用。RunIt 具有易于使用的界面,并为您提供了扩展以满足个人需求的机会。
包含 示例应用 以演示 RunIt 的功能。
例如,假设您有一个使用用户位置并处理推送通知的应用程序。您知道只有在用户授予访问权限的情况下这两项组件才可用。因此,如果没有访问权限,则不需要启动和存储单例中的位置服务。
// Somewhere in app initialization proccess
if locationIsAvailable {
let locationService = LocationComponent()
RunIt.add(locationService)
}
if APNSIsAvailable {
let APNSService = APNSComponent()
RunIt.add(APNSService)
// or
RunIt.add(component: APNSService, forKey: "APNSService")
}
稍后,在您的代码的任何地方,您都可以通过泛型获取器访问您的组件。
let apnsService: LocationComponent? = RunIt.get()
let apnsService: APNSComponent? = RunIt.get(componentForKey: "APNSService")
不需要组件 anymore? Easy
RunIt.remove(component: component)
RunIt.remove(componentForKey: "APNSService")
RunIt 提供的所有动作都是线程安全的。
您的组件可以遵循 Runnable
协议,并且当在 add
和 remove
操作上时,RunIt 将自动运行和停止您的组件。此外,run
将在单独的队列(默认为后台)上执行。您可以通过标志和定制 runOperationQueue 控制此行为。
RunIt.runComponentsOnAdd = false
RunIt.stopComponentOnRemove = false
RunIt.syncQueue = dispatch_get_main_queue() //Make your compoents run in main thread
RunIt.runOperationQueue.maxConcurrentOperationCount = 2
轻松控制组件的运行队列或其优先级,只需在您的组件中创建一个自定义队列
class SomeComponent: Runnable {
private(set) public var isRunning: Bool
public var runQueue: dispatch_queue_t? = dispatch_queue_create("YourQueue", DISPATCH_QUEUE_CONCURRENT)
public var priority: NSOperationQueuePriority = .High
...
}
您随时可以向 RunIt.runOperationQueue 添加自定义 NSOperation(s),但您需要知道这些操作不会吞噬您组件的运行进度。因此,在大量 NSOperation 对象的情况下,wise 以比您使用的组件较低优先级添加它们。
克隆仓库并将 Sources
文件夹中的文件拖放到您的 Xcode 项目中。
RunIt采用MIT许可协议。有关详细信息,请参阅LICENSE文件。