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.
- 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
 
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'Or you can install it with Carthage:
github "intelygenz/Kommander-iOS"
Or install it with Swift Package Manager:
dependencies: [
    .package(url: "https://github.com/intelygenz/Kommander-iOS.git")
]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()Kommander().make {
    throw MyError.error
}.error(MyError.self) { error in
    // error is MyError type.
}.execute()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()let kommand = Kommander().make { () -> Any? in
    // Your code here
}.error { error in
    // Your error handling here
}.retry { error, executionCount in
    return executionCount < 2
}.execute()Kommander(deliverer: Dispatcher = .current, executor: Dispatcher = .default)
Kommander(deliverer: Dispatcher = .current, name: String, qos: QualityOfService = .default, maxConcurrentOperations: Int = .default)Kommander.main
Kommander.current
Kommander.default
Kommander.userInteractive
Kommander.userInitiated
Kommander.utility
Kommander.backgroundCurrentDispatcher()
MainDispatcher()
Dispatcher(name: String, qos: QualityOfService = .default, maxConcurrentOperations: Int = .default)Dispatcher.main
Dispatcher.current
Dispatcher.default
Dispatcher.userInteractive
Dispatcher.userInitiated
Dispatcher.utility
Dispatcher.background- Contributions are very welcome.
 - Attribution is appreciated (let's spread the word!), but not mandatory.
 
alexruperez, [email protected]
RobertoEstrada, [email protected]
Kommander is available under the MIT license. See the LICENSE file for more info.

