Kommander is a Swift library to manage the task execution in different threads. Through the definition a simple but powerful concept, Kommand.
Inspired on the Java library Kommander from Wokdsem.
🌟 Features
- Make kommand or multiple kommands
- Execute kommand or multiple kommands
- Cancel kommand or multiple kommands
- Retry kommand or multiple kommands
- Set kommand success closure
- Set kommand error closure
- Set kommand error closure specifying Error type
- Main thread dispatcher
- Current thread dispatcher
- Custom OperationQueue dispatcher
- Execute single or multiple Operation
- Execute sequential or concurrent closures
- Execute DispatchWorkItem
- Kommand state
- iOS compatible
- watchOS compatible
- tvOS compatible
- macOS compatible
- Swift 4 version
- Swift 3 version
- Swift 2 version
- Objective-C version
📲 Installation
Kommander is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod 'Kommander'
For Swift 3 compatibility use:
pod 'Kommander', '~> 0.7'
For Swift 2 compatibility use:
pod 'Kommander', :git => 'https://github.com/intelygenz/Kommander-iOS.git', :tag => '0.3.0-swift2'
For Objective-C compatibility use:
pod 'Kommander', :git => 'https://github.com/intelygenz/Kommander-iOS.git', :tag => '0.2.3-objc'
Carthage:
Or you can install it withgithub "intelygenz/Kommander-iOS"
Swift Package Manager:
Or install it withdependencies: [
.package(url: "https://github.com/intelygenz/Kommander-iOS.git")
]
🐒 Usage
Making, executing, cancelling and retrying Kommands:
Kommander().make {
// Your code here
}.execute()
Kommander().make {
// Your code here
}.execute(after: .seconds(2))
Kommander().make {
return "Your string"
}.success { yourString in
print(yourString)
}.execute()
Kommander().make {
throw CocoaError(.featureUnsupported)
}.error { error in
print(String(describing: error!))
}.execute()
Specify Error type:
Kommander().make {
throw MyError.error
}.error(MyError.self) { error in
// error is MyError type.
}.execute()
Retry after cancellation:
let kommand = Kommander().make { () -> Any? in
// Your code here
}.success { result in
// Your success handling here
}.error { error in
// Your error handling here
}.execute()
kommand.cancel()
kommand.retry()
Retry after failure:
let kommand = Kommander().make { () -> Any? in
// Your code here
}.error { error in
// Your error handling here
}.retry { error, executionCount in
return executionCount < 2
}.execute()
Creating Kommanders:
Kommander(deliverer: Dispatcher = .current, executor: Dispatcher = .default)
Kommander(deliverer: Dispatcher = .current, name: String, qos: QualityOfService = .default, maxConcurrentOperations: Int = .default)
Shortcuts:
Kommander.main
Kommander.current
Kommander.default
Kommander.userInteractive
Kommander.userInitiated
Kommander.utility
Kommander.background
Creating Dispatchers:
CurrentDispatcher()
MainDispatcher()
Dispatcher(name: String, qos: QualityOfService = .default, maxConcurrentOperations: Int = .default)
Shortcuts:
Dispatcher.main
Dispatcher.current
Dispatcher.default
Dispatcher.userInteractive
Dispatcher.userInitiated
Dispatcher.utility
Dispatcher.background
❤️ Etc.
- Contributions are very welcome.
- Attribution is appreciated (let's spread the word!), but not mandatory.
👨💻 Authors
alexruperez, alejandro.ruperez@intelygenz.com
juantrias, juan.trias@intelygenz.com
RobertoEstrada, roberto.estrada@intelygenz.com
👮♂️ License
Kommander is available under the MIT license. See the LICENSE file for more info.