From 9ecde2fd97cfca61d649a2d46d4abaa948f26ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Rupe=CC=81rez?= Date: Sun, 26 Aug 2018 12:52:04 +0200 Subject: [PATCH 1/5] Release 1.1 with specific Error types and modern syntax. --- CHANGELOG.md | 5 + Kommander.podspec | 2 +- Kommander.xcodeproj/project.pbxproj | 30 ++-- .../xcdebugger/Breakpoints_v2.xcbkptlist | 12 -- .../xcshareddata/WorkspaceSettings.xcsettings | 8 + KommanderTests/DispatcherTests.swift | 14 +- KommanderTests/KommanderTests.swift | 34 ++--- Major/ViewController.swift | 18 +-- Package.swift | 17 ++- README.md | 35 +++-- Source/Dispatcher.swift | 24 +-- Source/Kommand.swift | 47 ++++-- Source/Kommander.swift | 24 +-- docs/Classes.html | 63 ++++---- docs/Classes/CurrentDispatcher.html | 8 +- docs/Classes/Dispatcher.html | 80 +++++----- docs/Classes/Kommand.html | 143 +++++++++++++----- docs/Classes/Kommand/State.html | 44 ++---- docs/Classes/Kommander.html | 64 ++++---- docs/Classes/MainDispatcher.html | 8 +- docs/Extensions.html | 7 +- docs/Extensions/Array.html | 22 +-- docs/Structs.html | 7 +- docs/Structs/KommandCancelledError.html | 10 +- .../Contents/Resources/Documents/Classes.html | 63 ++++---- .../Documents/Classes/CurrentDispatcher.html | 8 +- .../Documents/Classes/Dispatcher.html | 80 +++++----- .../Resources/Documents/Classes/Kommand.html | 143 +++++++++++++----- .../Documents/Classes/Kommand/State.html | 44 ++---- .../Documents/Classes/Kommander.html | 64 ++++---- .../Documents/Classes/MainDispatcher.html | 8 +- .../Resources/Documents/Extensions.html | 7 +- .../Resources/Documents/Extensions/Array.html | 22 +-- .../Contents/Resources/Documents/Structs.html | 7 +- .../Structs/KommandCancelledError.html | 10 +- .../Contents/Resources/Documents/index.html | 36 +++-- .../Contents/Resources/Documents/search.json | 2 +- .../Contents/Resources/docSet.dsidx | Bin 28672 -> 28672 bytes docs/docsets/Kommander.tgz | Bin 62360 -> 59811 bytes docs/index.html | 36 +++-- docs/search.json | 2 +- 41 files changed, 713 insertions(+), 545 deletions(-) create mode 100644 Kommander.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/CHANGELOG.md b/CHANGELOG.md index 4997ff8..8f56621 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# Release 1.1 + +- [x] Set kommand error closure specifying Error type. +- [x] Modern sugar syntax. + # Release 1.0.2 - [x] Ready for Swift 4.2. diff --git a/Kommander.podspec b/Kommander.podspec index bc036d5..0b53927 100755 --- a/Kommander.podspec +++ b/Kommander.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = 'Kommander' - s.version = '1.0.2' + s.version = '1.1' s.summary = 'A command pattern implementation written in Swift' s.homepage = 'https://github.com/intelygenz/Kommander-iOS' diff --git a/Kommander.xcodeproj/project.pbxproj b/Kommander.xcodeproj/project.pbxproj index 8a3d947..f59206b 100755 --- a/Kommander.xcodeproj/project.pbxproj +++ b/Kommander.xcodeproj/project.pbxproj @@ -590,56 +590,56 @@ TargetAttributes = { 815B58021E6573C700818819 = { CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = 3VW789WSMP; + DevelopmentTeam = Q6BEQCNWYM; LastSwiftMigration = ""; ProvisioningStyle = Automatic; }; 815B58151E6573C800818819 = { CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = 3VW789WSMP; + DevelopmentTeam = Q6BEQCNWYM; LastSwiftMigration = ""; ProvisioningStyle = Automatic; TestTargetID = 815B58021E6573C700818819; }; 81925CC41E3A0FFC001701F3 = { CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = 3VW789WSMP; + DevelopmentTeam = Q6BEQCNWYM; LastSwiftMigration = 1000; ProvisioningStyle = Automatic; }; 81925CCD1E3A0FFC001701F3 = { CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = 3VW789WSMP; + DevelopmentTeam = Q6BEQCNWYM; LastSwiftMigration = 1000; ProvisioningStyle = Automatic; }; 819D155C1E76AEFB00BB1F07 = { CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = 3VW789WSMP; + DevelopmentTeam = Q6BEQCNWYM; LastSwiftMigration = 0900; ProvisioningStyle = Automatic; }; 81DBBAD61E768DB300EF01D8 = { CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = 3VW789WSMP; + DevelopmentTeam = Q6BEQCNWYM; LastSwiftMigration = ""; ProvisioningStyle = Automatic; }; 81DBBAE31E768DE100EF01D8 = { CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = 3VW789WSMP; + DevelopmentTeam = Q6BEQCNWYM; LastSwiftMigration = 0900; ProvisioningStyle = Automatic; }; 81DBBB171E7691F300EF01D8 = { CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = 3VW789WSMP; + DevelopmentTeam = Q6BEQCNWYM; LastSwiftMigration = ""; ProvisioningStyle = Automatic; }; 81DBBB231E7691F400EF01D8 = { CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = 3VW789WSMP; + DevelopmentTeam = Q6BEQCNWYM; LastSwiftMigration = ""; ProvisioningStyle = Automatic; }; @@ -990,9 +990,9 @@ COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = "$(DYLIB_CURRENT_VERSION)"; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = 3VW789WSMP; - DYLIB_COMPATIBILITY_VERSION = 1.0.1; - DYLIB_CURRENT_VERSION = 1.0.2; + DEVELOPMENT_TEAM = Q6BEQCNWYM; + DYLIB_COMPATIBILITY_VERSION = 1.1; + DYLIB_CURRENT_VERSION = 1.1; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; @@ -1064,9 +1064,9 @@ COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = "$(DYLIB_CURRENT_VERSION)"; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = 3VW789WSMP; - DYLIB_COMPATIBILITY_VERSION = 1.0.1; - DYLIB_CURRENT_VERSION = 1.0.2; + DEVELOPMENT_TEAM = Q6BEQCNWYM; + DYLIB_COMPATIBILITY_VERSION = 1.1; + DYLIB_CURRENT_VERSION = 1.1; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; diff --git a/Kommander.xcodeproj/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist b/Kommander.xcodeproj/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist index a3f78c0..ab8eb6e 100755 --- a/Kommander.xcodeproj/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/Kommander.xcodeproj/xcshareddata/xcdebugger/Breakpoints_v2.xcbkptlist @@ -2,16 +2,4 @@ - - - - - - diff --git a/Kommander.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Kommander.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..3ddf867 --- /dev/null +++ b/Kommander.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + BuildSystemType + Latest + + diff --git a/KommanderTests/DispatcherTests.swift b/KommanderTests/DispatcherTests.swift index 5be33f5..89d4ecf 100644 --- a/KommanderTests/DispatcherTests.swift +++ b/KommanderTests/DispatcherTests.swift @@ -32,7 +32,7 @@ class DispatcherTests: XCTestCase { } func testDefaultDispatcherOperationQueue() { - let operation = dispatcher.execute({ sleep(2) }) + let operation = dispatcher.run({ sleep(2) }) XCTAssertGreaterThan(dispatcher.operationQueue.operationCount, 0) operation.cancel() XCTAssertTrue(operation.isCancelled) @@ -40,7 +40,7 @@ class DispatcherTests: XCTestCase { func testDefaultDispatcherDispatchQueue() { let dispatchWorkItem = DispatchWorkItem(qos: .default, flags: .assignCurrentContext) { sleep(2) } - dispatcher.execute(dispatchWorkItem) + dispatcher.run(dispatchWorkItem) XCTAssertFalse(dispatchWorkItem.isCancelled) dispatchWorkItem.cancel() XCTAssertTrue(dispatchWorkItem.isCancelled) @@ -52,7 +52,7 @@ class DispatcherTests: XCTestCase { XCTAssertEqual(dispatcher.operationQueue.name, randomName) XCTAssertEqual(dispatcher.operationQueue.maxConcurrentOperationCount, 1) XCTAssertEqual(dispatcher.operationQueue.qualityOfService, .background) - let operation = dispatcher.execute({ sleep(2) }) + let operation = dispatcher.run({ sleep(2) }) XCTAssertGreaterThan(dispatcher.operationQueue.operationCount, 0) operation.cancel() XCTAssertTrue(operation.isCancelled) @@ -60,7 +60,7 @@ class DispatcherTests: XCTestCase { func testMainDispatcherOperationQueue() { dispatcher = .main - let operation = dispatcher.execute({ sleep(2) }) + let operation = dispatcher.run({ sleep(2) }) XCTAssertEqual(dispatcher.operationQueue, OperationQueue.main) XCTAssertGreaterThan(dispatcher.operationQueue.operationCount, 0) operation.cancel() @@ -70,7 +70,7 @@ class DispatcherTests: XCTestCase { func testMainDispatcherDispatchQueue() { dispatcher = .main let dispatchWorkItem = DispatchWorkItem(qos: .default, flags: .assignCurrentContext) { sleep(2) } - dispatcher.execute(dispatchWorkItem) + dispatcher.run(dispatchWorkItem) XCTAssertEqual(dispatcher.dispatchQueue, DispatchQueue.main) XCTAssertFalse(dispatchWorkItem.isCancelled) dispatchWorkItem.cancel() @@ -81,7 +81,7 @@ class DispatcherTests: XCTestCase { let operationQueue = OperationQueue() operationQueue.addOperation { self.dispatcher = .current - let operation = self.dispatcher.execute({ sleep(2) }) + let operation = self.dispatcher.run({ sleep(2) }) XCTAssertGreaterThan(self.dispatcher.operationQueue.operationCount, 0) operation.cancel() XCTAssertTrue(operation.isCancelled) @@ -93,7 +93,7 @@ class DispatcherTests: XCTestCase { dispatchQueue.async { self.dispatcher = .current let dispatchWorkItem = DispatchWorkItem(qos: .default, flags: .assignCurrentContext) { sleep(2) } - self.dispatcher.execute(dispatchWorkItem) + self.dispatcher.run(dispatchWorkItem) XCTAssertFalse(dispatchWorkItem.isCancelled) dispatchWorkItem.cancel() XCTAssertTrue(dispatchWorkItem.isCancelled) diff --git a/KommanderTests/KommanderTests.swift b/KommanderTests/KommanderTests.swift index 6031141..b5af6b7 100755 --- a/KommanderTests/KommanderTests.swift +++ b/KommanderTests/KommanderTests.swift @@ -33,7 +33,7 @@ class KommanderTests: XCTestCase { .error({ (error) in ex.fulfill() XCTFail() - }).execute() + }).run() waitForExpectations(timeout: 100, handler: nil) } @@ -54,7 +54,7 @@ class KommanderTests: XCTestCase { .error({ (error) in ex.fulfill() XCTFail() - }).execute() + }).run() let k2 = interactor.getCounter(name: "C2", to: 5) .success({ (name) in @@ -66,10 +66,10 @@ class KommanderTests: XCTestCase { .error({ (error) in ex.fulfill() XCTFail() - }).execute() + }).run() - k1.execute() - k2.execute() + k1.run() + k2.run() waitForExpectations(timeout: 100, handler: nil) } @@ -93,7 +93,7 @@ class KommanderTests: XCTestCase { ex.fulfill() XCTFail() }) - .execute(after: .seconds(1)) + .run(after: .seconds(1)) } waitForExpectations(timeout: 100, handler: nil) @@ -118,7 +118,7 @@ class KommanderTests: XCTestCase { ex.fulfill() } }) - .execute() + .run() .cancel(true, after: .seconds(2)) } @@ -145,7 +145,7 @@ class KommanderTests: XCTestCase { ex.fulfill() XCTFail() }) - .execute() + .run() .cancel(false, after: .seconds(2)) .retry(after: .seconds(5)) } @@ -181,7 +181,7 @@ class KommanderTests: XCTestCase { let secondRecoverySuccess = error.attemptRecovery(optionIndex: 0) XCTAssertFalse(secondRecoverySuccess) }) - .execute() + .run() .cancel(true, after: .seconds(2)) } @@ -196,7 +196,7 @@ class KommanderTests: XCTestCase { var executions = 0 let retries = Int(arc4random_uniform(10) + 1) - kommander.make({ + kommander.do({ print("Execution: \(executions)") if throwingError { throw CocoaError(.featureUnsupported) @@ -217,7 +217,7 @@ class KommanderTests: XCTestCase { } executions += 1 return true - }).execute() + }).run() waitForExpectations(timeout: 100, handler: nil) } @@ -241,7 +241,7 @@ class KommanderTests: XCTestCase { ex.fulfill() XCTFail() }) - .execute() + .run() } waitForExpectations(timeout: 100, handler: nil) @@ -270,7 +270,7 @@ class KommanderTests: XCTestCase { })) } - interactor.kommander.execute(kommands, concurrent: true, waitUntilFinished: true) + interactor.kommander.run(kommands, concurrent: true, waitUntilFinished: true) waitForExpectations(timeout: 100, handler: nil) } @@ -298,7 +298,7 @@ class KommanderTests: XCTestCase { })) } - interactor.kommander.execute(kommands, concurrent: true, waitUntilFinished: false) + interactor.kommander.run(kommands, concurrent: true, waitUntilFinished: false) waitForExpectations(timeout: 100, handler: nil) } @@ -326,7 +326,7 @@ class KommanderTests: XCTestCase { })) } - interactor.kommander.execute(kommands, concurrent: false, waitUntilFinished: true) + interactor.kommander.run(kommands, concurrent: false, waitUntilFinished: true) waitForExpectations(timeout: 100, handler: nil) } @@ -354,7 +354,7 @@ class KommanderTests: XCTestCase { })) } - interactor.kommander.execute(kommands, concurrent: false, waitUntilFinished: false) + interactor.kommander.run(kommands, concurrent: false, waitUntilFinished: false) waitForExpectations(timeout: 100, handler: nil) } @@ -386,7 +386,7 @@ extension KommanderTests { } func getCounter(name: String, to: Int) -> Kommand { - return kommander.make({ () -> String in + return kommander.do({ () -> String in print ("\(name) Starts") var cont = 0 while cont < to { diff --git a/Major/ViewController.swift b/Major/ViewController.swift index 630b34f..b67aca0 100755 --- a/Major/ViewController.swift +++ b/Major/ViewController.swift @@ -15,16 +15,16 @@ class ViewController: UIViewController { let sleepTime: UInt32 = 2 @IBAction func singleAction(_ sender: UIButton) { - kommander.make { () -> TimeInterval in + kommander.do { () -> TimeInterval in sleep(self.sleepTime) return Date().timeIntervalSince1970 }.success { result in print("Single: " + String(describing: result)) - }.execute() + }.run() } @IBAction func concurrentAction(_ sender: UIButton) { - kommander.execute(kommander.make([ { () -> Any? in + kommander.run(kommander.do([ { () -> Any? in sleep(self.sleepTime) print("Concurrent first: " + String(describing: Date().timeIntervalSince1970)) return nil @@ -40,7 +40,7 @@ class ViewController: UIViewController { } @IBAction func sequentialAction(_ sender: UIButton) { - kommander.execute(kommander.make([ { () -> Any? in + kommander.run(kommander.do([ { () -> Any? in sleep(self.sleepTime) print("Sequential first: " + String(describing: Date().timeIntervalSince1970)) return nil @@ -56,18 +56,18 @@ class ViewController: UIViewController { } @IBAction func errorAction(_ sender: UIButton) { - kommander.make { + kommander.do { sleep(self.sleepTime) throw CocoaError(.featureUnsupported) - }.error { error in + }.error(CocoaError.self) { error in print("Error: " + String(describing: error!)) - }.execute() + }.run() } @IBAction func crashAction(_ sender: UIButton) { - kommander.make { + kommander.do { sleep(self.sleepTime) fatalError() - }.execute() + }.run() } } diff --git a/Package.swift b/Package.swift index 6ea5a5e..0111aa6 100755 --- a/Package.swift +++ b/Package.swift @@ -2,6 +2,19 @@ import PackageDescription let package = Package( name: "Kommander", + products: [ + .library( + name: "Kommander", + targets: ["Kommander"]) + ], dependencies : [], - exclude: ["Major", "Major watchOS", "Major watchOS Extension", "MajorUITests", "KommanderTests"] -) \ No newline at end of file + exclude: ["Major", "Major watchOS", "Major watchOS Extension", "MajorUITests", "KommanderTests"], + targets: [ + .target( + name: "Kommander", + dependencies: []), + .testTarget( + name: "KommanderTests", + dependencies: []), + ] +) diff --git a/README.md b/README.md index 51f9565..6d8e695 100755 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ Inspired on the Java library [**Kommander**](https://github.com/Wokdsem/Kommande - [x] Retry kommand or multiple kommands - [x] Set kommand success closure - [x] Set kommand error closure +- [x] Set kommand error closure specifying Error type - [x] Main thread dispatcher - [x] Current thread dispatcher - [x] Custom OperationQueue dispatcher @@ -89,43 +90,53 @@ dependencies: [ #### Making, executing, cancelling and retrying Kommands: ```swift -Kommander().make { +Kommander().do { // Your code here -}.execute() +}.run() ``` ```swift -Kommander().make { +Kommander().do { // Your code here -}.execute(after: .seconds(2)) +}.run(after: .seconds(2)) ``` ```swift -Kommander().make { +Kommander().do { return "Your string" }.success { yourString in print(yourString) -}.execute() +}.run() ``` ```swift -Kommander().make { +Kommander().do { throw CocoaError(.featureUnsupported) }.error { error in print(String(describing: error!)) -}.execute() +}.run() +``` + +##### Specify Error type: + +```swift +Kommander().do { + throw MyError.error +}.error(MyError.self) { error in + // error is MyError? type. +}.run() ``` ##### Retry after cancellation: ```swift -let kommand = Kommander().make { () -> Any? in +let kommand = Kommander().do { () -> Any? in // Your code here }.success { result in // Your success handling here }.error { error in // Your error handling here -}.execute() +}.run() kommand.cancel() @@ -135,13 +146,13 @@ kommand.retry() ##### Retry after failure: ```swift -let kommand = Kommander().make { () -> Any? in +let kommand = Kommander().do { () -> Any? in // Your code here }.error { error in // Your error handling here }.retry { error, executionCount in return executionCount < 2 -}.execute() +}.run() ``` #### Creating Kommanders: diff --git a/Source/Dispatcher.swift b/Source/Dispatcher.swift index edf53a2..f7318a9 100755 --- a/Source/Dispatcher.swift +++ b/Source/Dispatcher.swift @@ -40,24 +40,24 @@ open class Dispatcher { } /// Execute Operation instance in OperationQueue - open func execute(_ operation: Operation) { + open func run(_ operation: Operation) { operationQueue.addOperation(operation) } /// Execute [Operation] instance collection in OperationQueue - open func execute(_ operations: [Operation], waitUntilFinished: Bool = false) { + open func run(_ operations: [Operation], waitUntilFinished: Bool = false) { operationQueue.addOperations(operations, waitUntilFinished: waitUntilFinished) } /// Execute closure in OperationQueue - @discardableResult open func execute(_ closure: @escaping () -> Void) -> Operation { + @discardableResult open func run(_ closure: @escaping () -> Void) -> Operation { let operation = BlockOperation(block: closure) - execute(operation) + run(operation) return operation } /// Execute [closure] collection in OperationQueue concurrently or sequentially - @discardableResult open func execute(_ closures: [() -> Void], concurrent: Bool = true, waitUntilFinished: Bool = false) -> [Operation] { + @discardableResult open func run(_ closures: [() -> Void], concurrent: Bool = true, waitUntilFinished: Bool = false) -> [Operation] { var lastOperation: Operation? let operations = closures.map { closure -> Operation in let operation = BlockOperation(block: closure) @@ -67,12 +67,12 @@ open class Dispatcher { lastOperation = operation return operation } - execute(operations, waitUntilFinished: waitUntilFinished) + run(operations, waitUntilFinished: waitUntilFinished) return operations } /// Execute closure in DispatchQueue after delay - open func execute(after delay: DispatchTimeInterval, closure: @escaping () -> Void) { + open func run(after delay: DispatchTimeInterval, closure: @escaping () -> Void) { guard delay != .never else { return } @@ -80,7 +80,7 @@ open class Dispatcher { } /// Execute DispatchWorkItem instance in DispatchQueue after delay - open func execute(after delay: DispatchTimeInterval, work: DispatchWorkItem) { + open func run(after delay: DispatchTimeInterval, work: DispatchWorkItem) { guard delay != .never else { work.cancel() return @@ -89,7 +89,7 @@ open class Dispatcher { } /// Execute DispatchWorkItem instance in DispatchQueue - open func execute(_ work: DispatchWorkItem) { + open func run(_ work: DispatchWorkItem) { dispatchQueue.async(execute: work) } @@ -97,13 +97,13 @@ open class Dispatcher { public extension Array where Element: Operation { /// Execute [Operation] instance collection in OperationQueue - public func execute(by operationQueue: OperationQueue, waitUntilFinished: Bool = false) { + public func run(in operationQueue: OperationQueue, waitUntilFinished: Bool = false) { operationQueue.addOperations(self, waitUntilFinished: waitUntilFinished) } /// Execute [Operation] instance collection in Dispatcher - public func execute(by dispatcher: Dispatcher, waitUntilFinished: Bool = false) { - dispatcher.execute(self, waitUntilFinished: waitUntilFinished) + public func run(in dispatcher: Dispatcher, waitUntilFinished: Bool = false) { + dispatcher.run(self, waitUntilFinished: waitUntilFinished) } } diff --git a/Source/Kommand.swift b/Source/Kommand.swift index 5553485..33dff1f 100644 --- a/Source/Kommand.swift +++ b/Source/Kommand.swift @@ -107,12 +107,35 @@ open class Kommand { return self } + /// Specify Kommand error closure + @discardableResult open func error(_ type: Reason.Type, _ error: @escaping (_ error: Reason?) -> Void) -> Self { + self.errorClosure = { + guard let reason = $0 as? Reason else { + error(nil) + return + } + error(reason) + } + return self + } + /// Specify Kommand retry closure @discardableResult open func retry(_ retry: @escaping RetryClosure) -> Self { self.retryClosure = retry return self } + /// Specify Kommand error closure + @discardableResult open func retry(_ type: Reason.Type, _ retry: @escaping (_ error: Reason?, _ executionCount: UInt) -> Bool) -> Self { + self.retryClosure = { + guard let reason = $0 as? Reason else { + return retry(nil, $1) + } + return retry(reason, $1) + } + return self + } + open var result: Result? { guard case .succeeded(let result) = state else { return nil @@ -128,19 +151,19 @@ open class Kommand { } /// Execute Kommand after delay - @discardableResult open func execute(after delay: DispatchTimeInterval) -> Self { - executor?.execute(after: delay, closure: { - self.execute() + @discardableResult open func run(after delay: DispatchTimeInterval) -> Self { + executor?.run(after: delay, closure: { + self.run() }) return self } /// Execute Kommand - @discardableResult open func execute() -> Self { + @discardableResult open func run() -> Self { guard state == .ready else { return self } - operation = executor?.execute { + operation = executor?.run { do { if let actionClosure = self.actionClosure { self.state = .running @@ -149,7 +172,7 @@ open class Kommand { guard self.state == .running else { return } - self.deliverer?.execute { + self.deliverer?.run { self.state = .succeeded(result) self.successClosure?(result) } @@ -158,11 +181,11 @@ open class Kommand { guard self.state == .running else { return } - self.deliverer?.execute { + self.deliverer?.run { self.state = .failed(error) if self.retryClosure?(error, self.executionCount) == true { self.state = .ready - self.execute() + self.run() } else { self.errorClosure?(error) } @@ -174,7 +197,7 @@ open class Kommand { /// Cancel Kommand after delay @discardableResult open func cancel(_ throwingError: Bool = false, after delay: DispatchTimeInterval) -> Self { - executor?.execute(after: delay, closure: { + executor?.run(after: delay, closure: { self.cancel(throwingError) }) return self @@ -185,7 +208,7 @@ open class Kommand { guard state == .ready || state == .running else { return self } - self.deliverer?.execute { + self.deliverer?.run { if throwingError { self.errorClosure?(KommandCancelledError(self)) } @@ -199,7 +222,7 @@ open class Kommand { /// Retry Kommand after delay @discardableResult open func retry(after delay: DispatchTimeInterval) -> Self { - executor?.execute(after: delay, closure: { + executor?.run(after: delay, closure: { self.retry() }) return self @@ -211,7 +234,7 @@ open class Kommand { return self } state = .ready - return execute() + return run() } } diff --git a/Source/Kommander.swift b/Source/Kommander.swift index 864d90d..c1f483e 100644 --- a/Source/Kommander.swift +++ b/Source/Kommander.swift @@ -44,12 +44,12 @@ open class Kommander { } /// Build Kommand instance with an actionClosure returning generic and throwing errors - open func make(_ actionClosure: @escaping () throws -> Result) -> Kommand { + open func `do`(_ actionClosure: @escaping () throws -> Result) -> Kommand { return Kommand(deliverer: deliverer, executor: executor, actionClosure: actionClosure) } /// Build [Kommand] instances collection with actionClosures returning generic and throwing errors - open func make(_ actionClosures: [() throws -> Result]) -> [Kommand] { + open func `do`(_ actionClosures: [() throws -> Result]) -> [Kommand] { var kommands = [Kommand]() for actionClosure in actionClosures { kommands.append(Kommand(deliverer: deliverer, executor: executor, actionClosure: actionClosure)) @@ -58,18 +58,18 @@ open class Kommander { } /// Execute [Kommand] instances collection concurrently or sequentially after delay - open func execute(_ kommands: [Kommand], concurrent: Bool = true, waitUntilFinished: Bool = false, after delay: DispatchTimeInterval) { - executor.execute(after: delay) { - self.execute(kommands, concurrent: concurrent, waitUntilFinished: waitUntilFinished) + open func run(_ kommands: [Kommand], concurrent: Bool = true, waitUntilFinished: Bool = false, after delay: DispatchTimeInterval) { + executor.run(after: delay) { + self.run(kommands, concurrent: concurrent, waitUntilFinished: waitUntilFinished) } } /// Execute [Kommand] instances collection concurrently or sequentially - open func execute(_ kommands: [Kommand], concurrent: Bool = true, waitUntilFinished: Bool = false) { + open func run(_ kommands: [Kommand], concurrent: Bool = true, waitUntilFinished: Bool = false) { let executionClosures = kommands.map { kommand in executionClosure(kommand) } - let operations = executor.execute(executionClosures, concurrent: concurrent, waitUntilFinished: waitUntilFinished) + let operations = executor.run(executionClosures, concurrent: concurrent, waitUntilFinished: waitUntilFinished) for (index, kommand) in kommands.enumerated() { kommand.operation = operations[index] } @@ -77,7 +77,7 @@ open class Kommander { /// Cancel [Kommand] instances collection after delay open func cancel(_ kommands: [Kommand], throwingError: Bool = false, after delay: DispatchTimeInterval) { - executor.execute(after: delay) { + executor.run(after: delay) { self.cancel(kommands, throwingError: throwingError) } } @@ -91,7 +91,7 @@ open class Kommander { /// Retry [Kommand] instances collection after delay open func retry(_ kommands: [Kommand], after delay: DispatchTimeInterval) { - executor.execute(after: delay) { + executor.run(after: delay) { self.retry(kommands) } } @@ -120,7 +120,7 @@ private extension Kommander { guard kommand.state == .running else { return } - self.deliverer.execute { + self.deliverer.run { kommand.state = .succeeded(result) kommand.successClosure?(result) } @@ -129,11 +129,11 @@ private extension Kommander { guard kommand.state == .running else { return } - self.deliverer.execute { + self.deliverer.run { kommand.state = .failed(error) if kommand.retryClosure?(error, kommand.executionCount) == true { kommand.state = .ready - kommand.execute() + kommand.run() } else { kommand.errorClosure?(error) } diff --git a/docs/Classes.html b/docs/Classes.html index c96c6b1..7e78c98 100644 --- a/docs/Classes.html +++ b/docs/Classes.html @@ -10,6 +10,7 @@ +
@@ -100,7 +101,7 @@

Classes

Declaration

Swift

-
open class CurrentDispatcher: MainDispatcher
+
open class CurrentDispatcher : MainDispatcher
@@ -117,9 +118,9 @@

Declaration

  • - - - Kommander + + + Dispatcher
    @@ -127,20 +128,20 @@

    Declaration

    -

    Kommander manager

    +

    Dispatcher

    - See more + See more

    Declaration

    Swift

    -
    open class Kommander
    +
    open class Dispatcher
    @@ -152,9 +153,9 @@

    Declaration

  • - - - MainDispatcher + + + Kommand
    @@ -162,20 +163,20 @@

    Declaration

    -

    Main queue dispatcher

    +

    Generic Kommand

    - See more + See more

    Declaration

    Swift

    -
    open class MainDispatcher: Dispatcher
    +
    open class Kommand<Result>
    @@ -187,9 +188,9 @@

    Declaration

  • - - - Dispatcher + + + Kommander
    @@ -197,20 +198,20 @@

    Declaration

    -

    Dispatcher

    +

    Kommander manager

    - See more + See more

    Declaration

    Swift

    -
    open class Dispatcher
    +
    open class Kommander
    @@ -222,9 +223,9 @@

    Declaration

  • - - - Kommand + + + MainDispatcher
    @@ -232,20 +233,20 @@

    Declaration

    -

    Generic Kommand

    +

    Main queue dispatcher

    - See more + See more

    Declaration

    Swift

    -
    open class Kommand<Result>
    +
    open class MainDispatcher : Dispatcher
    @@ -255,8 +256,8 @@

    Declaration

    diff --git a/docs/Classes/CurrentDispatcher.html b/docs/Classes/CurrentDispatcher.html index cbbcd9e..f2e001d 100644 --- a/docs/Classes/CurrentDispatcher.html +++ b/docs/Classes/CurrentDispatcher.html @@ -76,7 +76,7 @@

    CurrentDispatcher

    -
    open class CurrentDispatcher: MainDispatcher
    +
    open class CurrentDispatcher : MainDispatcher
    @@ -106,7 +106,7 @@

    CurrentDispatcher

    Declaration

    Swift

    -
    public override init()
    +
    public override init()
    @@ -121,8 +121,8 @@

    Declaration

    diff --git a/docs/Classes/Dispatcher.html b/docs/Classes/Dispatcher.html index 379c4c9..015ac8b 100644 --- a/docs/Classes/Dispatcher.html +++ b/docs/Classes/Dispatcher.html @@ -76,7 +76,7 @@

    Dispatcher

    -
    open class Dispatcher
    +
    open class Dispatcher
    @@ -106,7 +106,7 @@

    Dispatcher

    Declaration

    Swift

    -
    public static var main: Dispatcher
    +
    public static var main: Dispatcher { get }
    @@ -136,7 +136,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var current: Dispatcher
    +
    public static var current: Dispatcher { get }
    @@ -166,7 +166,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var `default`: Dispatcher
    +
    public static var `default`: Dispatcher { get }
    @@ -196,7 +196,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var userInteractive: Dispatcher
    +
    public static var userInteractive: Dispatcher { get }
    @@ -226,7 +226,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var userInitiated: Dispatcher
    +
    public static var userInitiated: Dispatcher { get }
    @@ -256,7 +256,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var utility: Dispatcher
    +
    public static var utility: Dispatcher { get }
    @@ -286,7 +286,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var background: Dispatcher
    +
    public static var background: Dispatcher { get }
    @@ -316,7 +316,7 @@

    Declaration

    Declaration

    Swift

    -
    public init(name: String = UUID().uuidString, qos: QualityOfService = .default, maxConcurrentOperations: Int = OperationQueue.defaultMaxConcurrentOperationCount)
    +
    public init(name: String = UUID().uuidString, qos: QualityOfService = .default, maxConcurrentOperations: Int = OperationQueue.defaultMaxConcurrentOperationCount)
    @@ -329,9 +329,9 @@

    Declaration

  • - - - execute(_:) + + + run(_:)
    @@ -346,7 +346,7 @@

    Declaration

    Declaration

    Swift

    -
    open func execute(_ operation: Operation)
    +
    open func run(_ operation: Operation)
    @@ -359,9 +359,9 @@

    Declaration

  • @@ -376,7 +376,7 @@

    Declaration

    Declaration

    Swift

    -
    open func execute(_ operations: [Operation], waitUntilFinished: Bool = false)
    +
    open func run(_ operations: [Operation], waitUntilFinished: Bool = false)
    @@ -389,9 +389,9 @@

    Declaration

  • - - - execute(_:) + + + run(_:)
    @@ -406,7 +406,8 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func execute(_ closure: @escaping () -> Void) -> Operation
    +
    @discardableResult
    +open func run(_ closure: @escaping () -> Void) -> Operation
    @@ -419,9 +420,9 @@

    Declaration

  • @@ -436,7 +437,8 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func execute(_ closures: [() -> Void], concurrent: Bool = true, waitUntilFinished: Bool = false) -> [Operation]
    +
    @discardableResult
    +open func run(_ closures: [() -> Void], concurrent: Bool = true, waitUntilFinished: Bool = false) -> [Operation]
    @@ -449,9 +451,9 @@

    Declaration

  • @@ -466,7 +468,7 @@

    Declaration

    Declaration

    Swift

    -
    open func execute(after delay: DispatchTimeInterval, closure: @escaping () -> Void)
    +
    open func run(after delay: DispatchTimeInterval, closure: @escaping () -> Void)
    @@ -479,9 +481,9 @@

    Declaration

  • @@ -496,7 +498,7 @@

    Declaration

    Declaration

    Swift

    -
    open func execute(after delay: DispatchTimeInterval, work: DispatchWorkItem)
    +
    open func run(after delay: DispatchTimeInterval, work: DispatchWorkItem)
    @@ -509,9 +511,9 @@

    Declaration

  • - - - execute(_:) + + + run(_:)
    @@ -526,7 +528,7 @@

    Declaration

    Declaration

    Swift

    -
    open func execute(_ work: DispatchWorkItem)
    +
    open func run(_ work: DispatchWorkItem)
    @@ -541,8 +543,8 @@

    Declaration

    diff --git a/docs/Classes/Kommand.html b/docs/Classes/Kommand.html index 71340ad..141b886 100644 --- a/docs/Classes/Kommand.html +++ b/docs/Classes/Kommand.html @@ -76,7 +76,7 @@

    Kommand

    -
    open class Kommand<Result>
    +
    open class Kommand<Result>
    @@ -107,7 +107,7 @@

    Kommand

    Declaration

    Swift

    -
    public indirect enum State: Equatable
    +
    public indirect enum State : Equatable
    @@ -137,7 +137,7 @@

    Declaration

    Declaration

    Swift

    -
    public typealias ActionClosure = () throws -> Result
    +
    public typealias ActionClosure = () throws -> Result
    @@ -167,7 +167,7 @@

    Declaration

    Declaration

    Swift

    -
    public typealias SuccessClosure = (_ result: Result) -> Void
    +
    public typealias SuccessClosure = (_ result: Result) -> Void
    @@ -197,7 +197,7 @@

    Declaration

    Declaration

    Swift

    -
    public typealias ErrorClosure = (_ error: Swift.Error?) -> Void
    +
    public typealias ErrorClosure = (_ error: Swift.Error?) -> Void
    @@ -227,7 +227,7 @@

    Declaration

    Declaration

    Swift

    -
    public typealias RetryClosure = (_ error: Swift.Error?, _ executionCount: UInt) -> Bool
    +
    public typealias RetryClosure = (_ error: Swift.Error?, _ executionCount: UInt) -> Bool
    @@ -257,7 +257,7 @@

    Declaration

    Declaration

    Swift

    -
    internal(set) public final var state = State.uninitialized
    +
    internal(set) public final var state: Kommand<Result>.State
    @@ -287,7 +287,7 @@

    Declaration

    Declaration

    Swift

    -
    public required init(deliverer: Dispatcher = .current, executor: Dispatcher = .default, actionClosure: @escaping ActionClosure)
    +
    public required init(deliverer: Dispatcher = .current, executor: Dispatcher = .default, actionClosure: @escaping ActionClosure)
    @@ -317,7 +317,8 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func success(_ success: @escaping SuccessClosure) -> Self
    +
    @discardableResult
    +open func success(_ success: @escaping SuccessClosure) -> Self
    @@ -347,7 +348,8 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func error(_ error: @escaping ErrorClosure) -> Self
    +
    @discardableResult
    +open func error(_ error: @escaping ErrorClosure) -> Self
    @@ -357,6 +359,37 @@

    Declaration

  • +
  • +
    + + + + error(_:_:) + +
    +
    +
    +
    +
    +
    +

    Specify Kommand error closure

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @discardableResult
    +open func error<Reason: Swift.Error>(_ type: Reason.Type, _ error: @escaping (_ error: Reason?) -> Void) -> Self
    + +
    +
    + +
    +
    +
  • @@ -377,12 +410,44 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func retry(_ retry: @escaping RetryClosure) -> Self
    +
    @discardableResult
    +open func retry(_ retry: @escaping RetryClosure) -> Self
    + +
    +
    + + + +
  • +
  • +
    + + + + retry(_:_:) + +
    +
    +
    +
    +
    +
    +

    Specify Kommand error closure

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @discardableResult
    +open func retry<Reason: Swift.Error>(_ type: Reason.Type, _ retry: @escaping (_ error: Reason?, _ executionCount: UInt) -> Bool) -> Self
    @@ -407,12 +472,12 @@

    Declaration

    Declaration

    Swift

    -
    open var result: Result?
    +
    open var result: Result? { get }
    @@ -437,12 +502,12 @@

    Declaration

    Declaration

    Swift

    -
    open var error: Error?
    +
    open var error: Error? { get }
    @@ -450,9 +515,9 @@

    Declaration

  • @@ -467,12 +532,13 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func execute(after delay: DispatchTimeInterval) -> Self
    +
    @discardableResult
    +open func run(after delay: DispatchTimeInterval) -> Self
    @@ -480,9 +546,9 @@

    Declaration

  • - - - execute() + + + run()
    @@ -497,12 +563,13 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func execute() -> Self
    +
    @discardableResult
    +open func run() -> Self
    @@ -527,12 +594,13 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func cancel(_ throwingError: Bool = false, after delay: DispatchTimeInterval) -> Self
    +
    @discardableResult
    +open func cancel(_ throwingError: Bool = false, after delay: DispatchTimeInterval) -> Self
    @@ -557,12 +625,13 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func cancel(_ throwingError: Bool = false) -> Self
    +
    @discardableResult
    +open func cancel(_ throwingError: Bool = false) -> Self
    @@ -587,12 +656,13 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func retry(after delay: DispatchTimeInterval) -> Self
    +
    @discardableResult
    +open func retry(after delay: DispatchTimeInterval) -> Self
    @@ -617,12 +687,13 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func retry() -> Self
    +
    @discardableResult
    +open func retry() -> Self
    @@ -632,8 +703,8 @@

    Declaration

    diff --git a/docs/Classes/Kommand/State.html b/docs/Classes/Kommand/State.html index 34831ee..e9c610a 100644 --- a/docs/Classes/Kommand/State.html +++ b/docs/Classes/Kommand/State.html @@ -76,7 +76,7 @@

    State

    -
    public indirect enum State: Equatable
    +
    public indirect enum State : Equatable
    @@ -106,7 +106,7 @@

    State

    Declaration

    Swift

    -
    case uninitialized
    +
    case uninitialized
    @@ -116,10 +116,6 @@

    Declaration

  • - - -
    -
    • @@ -140,7 +136,7 @@

      Declaration

      Declaration

      Swift

      -
      case ready
      +
      case ready
      @@ -150,10 +146,6 @@

      Declaration

    - - -
    -
    • @@ -174,7 +166,7 @@

      Declaration

      Declaration

      Swift

      -
      case running
      +
      case running
      @@ -184,10 +176,6 @@

      Declaration

    - - -
    -
    • @@ -208,7 +196,7 @@

      Declaration

      Declaration

      Swift

      -
      case succeeded(Result)
      +
      case succeeded(Result)
      @@ -218,10 +206,6 @@

      Declaration

    - - -
    -
    • @@ -242,7 +226,7 @@

      Declaration

      Declaration

      Swift

      -
      case failed(Swift.Error)
      +
      case failed(Error)
      @@ -252,10 +236,6 @@

      Declaration

    - - -
    -
    • @@ -276,7 +256,7 @@

      Declaration

      Declaration

      Swift

      -
      case cancelled
      +
      case cancelled
      @@ -286,10 +266,6 @@

      Declaration

    - - -
    -
    • @@ -309,7 +285,7 @@

      Declaration

      Declaration

      Swift

      -
      public static func ==(lhs: State, rhs: State) -> Bool
      +
      public static func == (lhs: State, rhs: State) -> Bool
      @@ -324,8 +300,8 @@

      Declaration

    diff --git a/docs/Classes/Kommander.html b/docs/Classes/Kommander.html index ca150ff..fa0a07b 100644 --- a/docs/Classes/Kommander.html +++ b/docs/Classes/Kommander.html @@ -76,7 +76,7 @@

    Kommander

    -
    open class Kommander
    +
    open class Kommander
    @@ -106,7 +106,7 @@

    Kommander

    Declaration

    Swift

    -
    public static var main: Kommander
    +
    public static var main: Kommander { get }
    @@ -136,7 +136,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var current: Kommander
    +
    public static var current: Kommander { get }
    @@ -166,7 +166,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var `default`: Kommander
    +
    public static var `default`: Kommander { get }
    @@ -196,7 +196,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var userInteractive: Kommander
    +
    public static var userInteractive: Kommander { get }
    @@ -226,7 +226,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var userInitiated: Kommander
    +
    public static var userInitiated: Kommander { get }
    @@ -256,7 +256,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var utility: Kommander
    +
    public static var utility: Kommander { get }
    @@ -286,7 +286,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var background: Kommander
    +
    public static var background: Kommander { get }
    @@ -316,7 +316,7 @@

    Declaration

    Declaration

    Swift

    -
    public init(deliverer: Dispatcher = .current, executor: Dispatcher = .default)
    +
    public init(deliverer: Dispatcher = .current, executor: Dispatcher = .default)
    @@ -346,7 +346,7 @@

    Declaration

    Declaration

    Swift

    -
    public init(deliverer: Dispatcher = .current, name: String = UUID().uuidString, qos: QualityOfService = .default, maxConcurrentOperations: Int = OperationQueue.defaultMaxConcurrentOperationCount)
    +
    public init(deliverer: Dispatcher = .current, name: String = UUID().uuidString, qos: QualityOfService = .default, maxConcurrentOperations: Int = OperationQueue.defaultMaxConcurrentOperationCount)
    @@ -359,9 +359,9 @@

    Declaration

  • - - - make(_:) + + + do(_:)
    @@ -376,7 +376,7 @@

    Declaration

    Declaration

    Swift

    -
    open func make<Result>(_ actionClosure: @escaping () throws -> Result) -> Kommand<Result>
    +
    open func `do`<Result>(_ actionClosure: @escaping () throws -> Result) -> Kommand<Result>
    @@ -389,9 +389,9 @@

    Declaration

  • - - - make(_:) + + + do(_:)
    @@ -406,7 +406,7 @@

    Declaration

    Declaration

    Swift

    -
    open func make<Result>(_ actionClosures: [() throws -> Result]) -> [Kommand<Result>]
    +
    open func `do`<Result>(_ actionClosures: [() throws -> Result]) -> [Kommand<Result>]
    @@ -419,9 +419,9 @@

    Declaration

  • @@ -436,7 +436,7 @@

    Declaration

    Declaration

    Swift

    -
    open func execute<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false, after delay: DispatchTimeInterval)
    +
    open func run<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false, after delay: DispatchTimeInterval)
    @@ -449,9 +449,9 @@

    Declaration

  • @@ -466,7 +466,7 @@

    Declaration

    Declaration

    Swift

    -
    open func execute<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false)
    +
    open func run<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false)
    @@ -496,7 +496,7 @@

    Declaration

    Declaration

    Swift

    -
    open func cancel<Result>(_ kommands: [Kommand<Result>], throwingError: Bool = false, after delay: DispatchTimeInterval)
    +
    open func cancel<Result>(_ kommands: [Kommand<Result>], throwingError: Bool = false, after delay: DispatchTimeInterval)
    @@ -526,7 +526,7 @@

    Declaration

    Declaration

    Swift

    -
    open func cancel<Result>(_ kommands: [Kommand<Result>], throwingError: Bool = false)
    +
    open func cancel<Result>(_ kommands: [Kommand<Result>], throwingError: Bool = false)
    @@ -556,7 +556,7 @@

    Declaration

    Declaration

    Swift

    -
    open func retry<Result>(_ kommands: [Kommand<Result>], after delay: DispatchTimeInterval)
    +
    open func retry<Result>(_ kommands: [Kommand<Result>], after delay: DispatchTimeInterval)
    @@ -586,7 +586,7 @@

    Declaration

    Declaration

    Swift

    -
    open func retry<Result>(_ kommands: [Kommand<Result>])
    +
    open func retry<Result>(_ kommands: [Kommand<Result>])
    @@ -601,8 +601,8 @@

    Declaration

    diff --git a/docs/Classes/MainDispatcher.html b/docs/Classes/MainDispatcher.html index 2b97c41..af2a670 100644 --- a/docs/Classes/MainDispatcher.html +++ b/docs/Classes/MainDispatcher.html @@ -76,7 +76,7 @@

    MainDispatcher

    -
    open class MainDispatcher: Dispatcher
    +
    open class MainDispatcher : Dispatcher
    @@ -106,7 +106,7 @@

    MainDispatcher

    Declaration

    Swift

    -
    public init()
    +
    public init()
    @@ -121,8 +121,8 @@

    Declaration

    diff --git a/docs/Extensions.html b/docs/Extensions.html index 74ff53d..5171e8d 100644 --- a/docs/Extensions.html +++ b/docs/Extensions.html @@ -10,6 +10,7 @@ +
    @@ -99,7 +100,7 @@

    Extensions

    Declaration

    Swift

    -
    struct Array<Element>
    +
    struct Array<Element> : _DestructorSafeContainer
    @@ -111,8 +112,8 @@

    Declaration

    diff --git a/docs/Extensions/Array.html b/docs/Extensions/Array.html index 8f1ad64..8fd2a42 100644 --- a/docs/Extensions/Array.html +++ b/docs/Extensions/Array.html @@ -76,7 +76,7 @@

    Array

    -
    struct Array<Element>
    +
    struct Array<Element> : _DestructorSafeContainer
    @@ -88,9 +88,9 @@

    Array

  • @@ -105,7 +105,7 @@

    Array

    Declaration

    Swift

    -
    public func execute(by operationQueue: OperationQueue, waitUntilFinished: Bool = false)
    +
    public func run(in operationQueue: OperationQueue, waitUntilFinished: Bool = false)
    @@ -118,9 +118,9 @@

    Declaration

  • @@ -135,7 +135,7 @@

    Declaration

    Declaration

    Swift

    -
    public func execute(by dispatcher: Dispatcher, waitUntilFinished: Bool = false)
    +
    public func run(in dispatcher: Dispatcher, waitUntilFinished: Bool = false)
    @@ -150,8 +150,8 @@

    Declaration

    diff --git a/docs/Structs.html b/docs/Structs.html index c9ccbc5..c1bbeb3 100644 --- a/docs/Structs.html +++ b/docs/Structs.html @@ -10,6 +10,7 @@ +
    @@ -100,7 +101,7 @@

    Structures

    Declaration

    Swift

    -
    public struct KommandCancelledError<Result>: RecoverableError
    +
    public struct KommandCancelledError<Result> : RecoverableError
    @@ -115,8 +116,8 @@

    Declaration

    diff --git a/docs/Structs/KommandCancelledError.html b/docs/Structs/KommandCancelledError.html index 2b60726..e899356 100644 --- a/docs/Structs/KommandCancelledError.html +++ b/docs/Structs/KommandCancelledError.html @@ -76,7 +76,7 @@

    KommandCancelledError

    -
    public struct KommandCancelledError<Result>: RecoverableError
    +
    public struct KommandCancelledError<Result> : RecoverableError
    @@ -106,7 +106,7 @@

    KommandCancelledError

    Declaration

    Swift

    -
    public var recoveryOptions: [String]
    +
    public var recoveryOptions: [String] { get }
    @@ -143,7 +143,7 @@

    Declaration

    Declaration

    Swift

    -
    public func attemptRecovery(optionIndex recoveryOptionIndex: Int) -> Bool
    +
    public func attemptRecovery(optionIndex recoveryOptionIndex: Int) -> Bool
    @@ -158,8 +158,8 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes.html index c96c6b1..7e78c98 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes.html @@ -10,6 +10,7 @@ +
    @@ -100,7 +101,7 @@

    Classes

    Declaration

    Swift

    -
    open class CurrentDispatcher: MainDispatcher
    +
    open class CurrentDispatcher : MainDispatcher
    @@ -117,9 +118,9 @@

    Declaration

  • - - - Kommander + + + Dispatcher
    @@ -127,20 +128,20 @@

    Declaration

    -

    Kommander manager

    +

    Dispatcher

    - See more + See more

    Declaration

    Swift

    -
    open class Kommander
    +
    open class Dispatcher
    @@ -152,9 +153,9 @@

    Declaration

  • - - - MainDispatcher + + + Kommand
    @@ -162,20 +163,20 @@

    Declaration

    -

    Main queue dispatcher

    +

    Generic Kommand

    - See more + See more

    Declaration

    Swift

    -
    open class MainDispatcher: Dispatcher
    +
    open class Kommand<Result>
    @@ -187,9 +188,9 @@

    Declaration

  • - - - Dispatcher + + + Kommander
    @@ -197,20 +198,20 @@

    Declaration

    -

    Dispatcher

    +

    Kommander manager

    - See more + See more

    Declaration

    Swift

    -
    open class Dispatcher
    +
    open class Kommander
    @@ -222,9 +223,9 @@

    Declaration

  • - - - Kommand + + + MainDispatcher
    @@ -232,20 +233,20 @@

    Declaration

    -

    Generic Kommand

    +

    Main queue dispatcher

    - See more + See more

    Declaration

    Swift

    -
    open class Kommand<Result>
    +
    open class MainDispatcher : Dispatcher
    @@ -255,8 +256,8 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/CurrentDispatcher.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/CurrentDispatcher.html index cbbcd9e..f2e001d 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/CurrentDispatcher.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/CurrentDispatcher.html @@ -76,7 +76,7 @@

    CurrentDispatcher

    -
    open class CurrentDispatcher: MainDispatcher
    +
    open class CurrentDispatcher : MainDispatcher
    @@ -106,7 +106,7 @@

    CurrentDispatcher

    Declaration

    Swift

    -
    public override init()
    +
    public override init()
    @@ -121,8 +121,8 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Dispatcher.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Dispatcher.html index 379c4c9..015ac8b 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Dispatcher.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Dispatcher.html @@ -76,7 +76,7 @@

    Dispatcher

    -
    open class Dispatcher
    +
    open class Dispatcher
    @@ -106,7 +106,7 @@

    Dispatcher

    Declaration

    Swift

    -
    public static var main: Dispatcher
    +
    public static var main: Dispatcher { get }
    @@ -136,7 +136,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var current: Dispatcher
    +
    public static var current: Dispatcher { get }
    @@ -166,7 +166,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var `default`: Dispatcher
    +
    public static var `default`: Dispatcher { get }
    @@ -196,7 +196,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var userInteractive: Dispatcher
    +
    public static var userInteractive: Dispatcher { get }
    @@ -226,7 +226,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var userInitiated: Dispatcher
    +
    public static var userInitiated: Dispatcher { get }
    @@ -256,7 +256,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var utility: Dispatcher
    +
    public static var utility: Dispatcher { get }
    @@ -286,7 +286,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var background: Dispatcher
    +
    public static var background: Dispatcher { get }
    @@ -316,7 +316,7 @@

    Declaration

    Declaration

    Swift

    -
    public init(name: String = UUID().uuidString, qos: QualityOfService = .default, maxConcurrentOperations: Int = OperationQueue.defaultMaxConcurrentOperationCount)
    +
    public init(name: String = UUID().uuidString, qos: QualityOfService = .default, maxConcurrentOperations: Int = OperationQueue.defaultMaxConcurrentOperationCount)
    @@ -329,9 +329,9 @@

    Declaration

  • - - - execute(_:) + + + run(_:)
    @@ -346,7 +346,7 @@

    Declaration

    Declaration

    Swift

    -
    open func execute(_ operation: Operation)
    +
    open func run(_ operation: Operation)
    @@ -359,9 +359,9 @@

    Declaration

  • @@ -376,7 +376,7 @@

    Declaration

    Declaration

    Swift

    -
    open func execute(_ operations: [Operation], waitUntilFinished: Bool = false)
    +
    open func run(_ operations: [Operation], waitUntilFinished: Bool = false)
    @@ -389,9 +389,9 @@

    Declaration

  • - - - execute(_:) + + + run(_:)
    @@ -406,7 +406,8 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func execute(_ closure: @escaping () -> Void) -> Operation
    +
    @discardableResult
    +open func run(_ closure: @escaping () -> Void) -> Operation
    @@ -419,9 +420,9 @@

    Declaration

  • @@ -436,7 +437,8 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func execute(_ closures: [() -> Void], concurrent: Bool = true, waitUntilFinished: Bool = false) -> [Operation]
    +
    @discardableResult
    +open func run(_ closures: [() -> Void], concurrent: Bool = true, waitUntilFinished: Bool = false) -> [Operation]
    @@ -449,9 +451,9 @@

    Declaration

  • @@ -466,7 +468,7 @@

    Declaration

    Declaration

    Swift

    -
    open func execute(after delay: DispatchTimeInterval, closure: @escaping () -> Void)
    +
    open func run(after delay: DispatchTimeInterval, closure: @escaping () -> Void)
    @@ -479,9 +481,9 @@

    Declaration

  • @@ -496,7 +498,7 @@

    Declaration

    Declaration

    Swift

    -
    open func execute(after delay: DispatchTimeInterval, work: DispatchWorkItem)
    +
    open func run(after delay: DispatchTimeInterval, work: DispatchWorkItem)
    @@ -509,9 +511,9 @@

    Declaration

  • - - - execute(_:) + + + run(_:)
    @@ -526,7 +528,7 @@

    Declaration

    Declaration

    Swift

    -
    open func execute(_ work: DispatchWorkItem)
    +
    open func run(_ work: DispatchWorkItem)
    @@ -541,8 +543,8 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand.html index 71340ad..141b886 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand.html @@ -76,7 +76,7 @@

    Kommand

    -
    open class Kommand<Result>
    +
    open class Kommand<Result>
    @@ -107,7 +107,7 @@

    Kommand

    Declaration

    Swift

    -
    public indirect enum State: Equatable
    +
    public indirect enum State : Equatable
    @@ -137,7 +137,7 @@

    Declaration

    Declaration

    Swift

    -
    public typealias ActionClosure = () throws -> Result
    +
    public typealias ActionClosure = () throws -> Result
    @@ -167,7 +167,7 @@

    Declaration

    Declaration

    Swift

    -
    public typealias SuccessClosure = (_ result: Result) -> Void
    +
    public typealias SuccessClosure = (_ result: Result) -> Void
    @@ -197,7 +197,7 @@

    Declaration

    Declaration

    Swift

    -
    public typealias ErrorClosure = (_ error: Swift.Error?) -> Void
    +
    public typealias ErrorClosure = (_ error: Swift.Error?) -> Void
    @@ -227,7 +227,7 @@

    Declaration

    Declaration

    Swift

    -
    public typealias RetryClosure = (_ error: Swift.Error?, _ executionCount: UInt) -> Bool
    +
    public typealias RetryClosure = (_ error: Swift.Error?, _ executionCount: UInt) -> Bool
    @@ -257,7 +257,7 @@

    Declaration

    Declaration

    Swift

    -
    internal(set) public final var state = State.uninitialized
    +
    internal(set) public final var state: Kommand<Result>.State
    @@ -287,7 +287,7 @@

    Declaration

    Declaration

    Swift

    -
    public required init(deliverer: Dispatcher = .current, executor: Dispatcher = .default, actionClosure: @escaping ActionClosure)
    +
    public required init(deliverer: Dispatcher = .current, executor: Dispatcher = .default, actionClosure: @escaping ActionClosure)
    @@ -317,7 +317,8 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func success(_ success: @escaping SuccessClosure) -> Self
    +
    @discardableResult
    +open func success(_ success: @escaping SuccessClosure) -> Self
    @@ -347,7 +348,8 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func error(_ error: @escaping ErrorClosure) -> Self
    +
    @discardableResult
    +open func error(_ error: @escaping ErrorClosure) -> Self
    @@ -357,6 +359,37 @@

    Declaration

  • +
  • +
    + + + + error(_:_:) + +
    +
    +
    +
    +
    +
    +

    Specify Kommand error closure

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @discardableResult
    +open func error<Reason: Swift.Error>(_ type: Reason.Type, _ error: @escaping (_ error: Reason?) -> Void) -> Self
    + +
    +
    + +
    +
    +
  • @@ -377,12 +410,44 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func retry(_ retry: @escaping RetryClosure) -> Self
    +
    @discardableResult
    +open func retry(_ retry: @escaping RetryClosure) -> Self
    + +
    +
    + + + +
  • +
  • +
    + + + + retry(_:_:) + +
    +
    +
    +
    +
    +
    +

    Specify Kommand error closure

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @discardableResult
    +open func retry<Reason: Swift.Error>(_ type: Reason.Type, _ retry: @escaping (_ error: Reason?, _ executionCount: UInt) -> Bool) -> Self
    @@ -407,12 +472,12 @@

    Declaration

    Declaration

    Swift

    -
    open var result: Result?
    +
    open var result: Result? { get }
    @@ -437,12 +502,12 @@

    Declaration

    Declaration

    Swift

    -
    open var error: Error?
    +
    open var error: Error? { get }
    @@ -450,9 +515,9 @@

    Declaration

  • @@ -467,12 +532,13 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func execute(after delay: DispatchTimeInterval) -> Self
    +
    @discardableResult
    +open func run(after delay: DispatchTimeInterval) -> Self
    @@ -480,9 +546,9 @@

    Declaration

  • - - - execute() + + + run()
    @@ -497,12 +563,13 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func execute() -> Self
    +
    @discardableResult
    +open func run() -> Self
    @@ -527,12 +594,13 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func cancel(_ throwingError: Bool = false, after delay: DispatchTimeInterval) -> Self
    +
    @discardableResult
    +open func cancel(_ throwingError: Bool = false, after delay: DispatchTimeInterval) -> Self
    @@ -557,12 +625,13 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func cancel(_ throwingError: Bool = false) -> Self
    +
    @discardableResult
    +open func cancel(_ throwingError: Bool = false) -> Self
    @@ -587,12 +656,13 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func retry(after delay: DispatchTimeInterval) -> Self
    +
    @discardableResult
    +open func retry(after delay: DispatchTimeInterval) -> Self
    @@ -617,12 +687,13 @@

    Declaration

    Declaration

    Swift

    -
    @discardableResult open func retry() -> Self
    +
    @discardableResult
    +open func retry() -> Self
    @@ -632,8 +703,8 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand/State.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand/State.html index 34831ee..e9c610a 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand/State.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand/State.html @@ -76,7 +76,7 @@

    State

    -
    public indirect enum State: Equatable
    +
    public indirect enum State : Equatable
    @@ -106,7 +106,7 @@

    State

    Declaration

    Swift

    -
    case uninitialized
    +
    case uninitialized
    @@ -116,10 +116,6 @@

    Declaration

  • - - -
    -
    • @@ -140,7 +136,7 @@

      Declaration

      Declaration

      Swift

      -
      case ready
      +
      case ready
      @@ -150,10 +146,6 @@

      Declaration

  • - - -
    -
    • @@ -174,7 +166,7 @@

      Declaration

      Declaration

      Swift

      -
      case running
      +
      case running
      @@ -184,10 +176,6 @@

      Declaration

  • - - -
    -
    • @@ -208,7 +196,7 @@

      Declaration

      Declaration

      Swift

      -
      case succeeded(Result)
      +
      case succeeded(Result)
      @@ -218,10 +206,6 @@

      Declaration

    - - -
    -
    • @@ -242,7 +226,7 @@

      Declaration

      Declaration

      Swift

      -
      case failed(Swift.Error)
      +
      case failed(Error)
      @@ -252,10 +236,6 @@

      Declaration

    - - -
    -
    • @@ -276,7 +256,7 @@

      Declaration

      Declaration

      Swift

      -
      case cancelled
      +
      case cancelled
      @@ -286,10 +266,6 @@

      Declaration

    - - -
    -
    • @@ -309,7 +285,7 @@

      Declaration

      Declaration

      Swift

      -
      public static func ==(lhs: State, rhs: State) -> Bool
      +
      public static func == (lhs: State, rhs: State) -> Bool
      @@ -324,8 +300,8 @@

      Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommander.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommander.html index ca150ff..fa0a07b 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommander.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommander.html @@ -76,7 +76,7 @@

    Kommander

    -
    open class Kommander
    +
    open class Kommander
    @@ -106,7 +106,7 @@

    Kommander

    Declaration

    Swift

    -
    public static var main: Kommander
    +
    public static var main: Kommander { get }
    @@ -136,7 +136,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var current: Kommander
    +
    public static var current: Kommander { get }
    @@ -166,7 +166,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var `default`: Kommander
    +
    public static var `default`: Kommander { get }
    @@ -196,7 +196,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var userInteractive: Kommander
    +
    public static var userInteractive: Kommander { get }
    @@ -226,7 +226,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var userInitiated: Kommander
    +
    public static var userInitiated: Kommander { get }
    @@ -256,7 +256,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var utility: Kommander
    +
    public static var utility: Kommander { get }
    @@ -286,7 +286,7 @@

    Declaration

    Declaration

    Swift

    -
    public static var background: Kommander
    +
    public static var background: Kommander { get }
    @@ -316,7 +316,7 @@

    Declaration

    Declaration

    Swift

    -
    public init(deliverer: Dispatcher = .current, executor: Dispatcher = .default)
    +
    public init(deliverer: Dispatcher = .current, executor: Dispatcher = .default)
    @@ -346,7 +346,7 @@

    Declaration

    Declaration

    Swift

    -
    public init(deliverer: Dispatcher = .current, name: String = UUID().uuidString, qos: QualityOfService = .default, maxConcurrentOperations: Int = OperationQueue.defaultMaxConcurrentOperationCount)
    +
    public init(deliverer: Dispatcher = .current, name: String = UUID().uuidString, qos: QualityOfService = .default, maxConcurrentOperations: Int = OperationQueue.defaultMaxConcurrentOperationCount)
    @@ -359,9 +359,9 @@

    Declaration

  • - - - make(_:) + + + do(_:)
    @@ -376,7 +376,7 @@

    Declaration

    Declaration

    Swift

    -
    open func make<Result>(_ actionClosure: @escaping () throws -> Result) -> Kommand<Result>
    +
    open func `do`<Result>(_ actionClosure: @escaping () throws -> Result) -> Kommand<Result>
    @@ -389,9 +389,9 @@

    Declaration

  • - - - make(_:) + + + do(_:)
    @@ -406,7 +406,7 @@

    Declaration

    Declaration

    Swift

    -
    open func make<Result>(_ actionClosures: [() throws -> Result]) -> [Kommand<Result>]
    +
    open func `do`<Result>(_ actionClosures: [() throws -> Result]) -> [Kommand<Result>]
    @@ -419,9 +419,9 @@

    Declaration

  • @@ -436,7 +436,7 @@

    Declaration

    Declaration

    Swift

    -
    open func execute<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false, after delay: DispatchTimeInterval)
    +
    open func run<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false, after delay: DispatchTimeInterval)
    @@ -449,9 +449,9 @@

    Declaration

  • @@ -466,7 +466,7 @@

    Declaration

    Declaration

    Swift

    -
    open func execute<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false)
    +
    open func run<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false)
    @@ -496,7 +496,7 @@

    Declaration

    Declaration

    Swift

    -
    open func cancel<Result>(_ kommands: [Kommand<Result>], throwingError: Bool = false, after delay: DispatchTimeInterval)
    +
    open func cancel<Result>(_ kommands: [Kommand<Result>], throwingError: Bool = false, after delay: DispatchTimeInterval)
    @@ -526,7 +526,7 @@

    Declaration

    Declaration

    Swift

    -
    open func cancel<Result>(_ kommands: [Kommand<Result>], throwingError: Bool = false)
    +
    open func cancel<Result>(_ kommands: [Kommand<Result>], throwingError: Bool = false)
    @@ -556,7 +556,7 @@

    Declaration

    Declaration

    Swift

    -
    open func retry<Result>(_ kommands: [Kommand<Result>], after delay: DispatchTimeInterval)
    +
    open func retry<Result>(_ kommands: [Kommand<Result>], after delay: DispatchTimeInterval)
    @@ -586,7 +586,7 @@

    Declaration

    Declaration

    Swift

    -
    open func retry<Result>(_ kommands: [Kommand<Result>])
    +
    open func retry<Result>(_ kommands: [Kommand<Result>])
    @@ -601,8 +601,8 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/MainDispatcher.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/MainDispatcher.html index 2b97c41..af2a670 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/MainDispatcher.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/MainDispatcher.html @@ -76,7 +76,7 @@

    MainDispatcher

    -
    open class MainDispatcher: Dispatcher
    +
    open class MainDispatcher : Dispatcher
    @@ -106,7 +106,7 @@

    MainDispatcher

    Declaration

    Swift

    -
    public init()
    +
    public init()
    @@ -121,8 +121,8 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions.html index 74ff53d..5171e8d 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions.html @@ -10,6 +10,7 @@ +
    @@ -99,7 +100,7 @@

    Extensions

    Declaration

    Swift

    -
    struct Array<Element>
    +
    struct Array<Element> : _DestructorSafeContainer
    @@ -111,8 +112,8 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions/Array.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions/Array.html index 8f1ad64..8fd2a42 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions/Array.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions/Array.html @@ -76,7 +76,7 @@

    Array

    -
    struct Array<Element>
    +
    struct Array<Element> : _DestructorSafeContainer
    @@ -88,9 +88,9 @@

    Array

  • @@ -105,7 +105,7 @@

    Array

    Declaration

    Swift

    -
    public func execute(by operationQueue: OperationQueue, waitUntilFinished: Bool = false)
    +
    public func run(in operationQueue: OperationQueue, waitUntilFinished: Bool = false)
    @@ -118,9 +118,9 @@

    Declaration

  • @@ -135,7 +135,7 @@

    Declaration

    Declaration

    Swift

    -
    public func execute(by dispatcher: Dispatcher, waitUntilFinished: Bool = false)
    +
    public func run(in dispatcher: Dispatcher, waitUntilFinished: Bool = false)
    @@ -150,8 +150,8 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs.html index c9ccbc5..c1bbeb3 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs.html @@ -10,6 +10,7 @@ +
    @@ -100,7 +101,7 @@

    Structures

    Declaration

    Swift

    -
    public struct KommandCancelledError<Result>: RecoverableError
    +
    public struct KommandCancelledError<Result> : RecoverableError
    @@ -115,8 +116,8 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs/KommandCancelledError.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs/KommandCancelledError.html index 2b60726..e899356 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs/KommandCancelledError.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs/KommandCancelledError.html @@ -76,7 +76,7 @@

    KommandCancelledError

    -
    public struct KommandCancelledError<Result>: RecoverableError
    +
    public struct KommandCancelledError<Result> : RecoverableError
    @@ -106,7 +106,7 @@

    KommandCancelledError

    Declaration

    Swift

    -
    public var recoveryOptions: [String]
    +
    public var recoveryOptions: [String] { get }
    @@ -143,7 +143,7 @@

    Declaration

    Declaration

    Swift

    -
    public func attemptRecovery(optionIndex recoveryOptionIndex: Int) -> Bool
    +
    public func attemptRecovery(optionIndex recoveryOptionIndex: Int) -> Bool
    @@ -158,8 +158,8 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/index.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/index.html index f4d9d37..ec59b09 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/index.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/index.html @@ -101,6 +101,7 @@

    🌟 Features

  • [x] Retry kommand or multiple kommands
  • [x] Set kommand success closure
  • [x] Set kommand error closure
  • +
  • [x] Set kommand error closure specifying Error type
  • [x] Main thread dispatcher
  • [x] Current thread dispatcher
  • [x] Custom OperationQueue dispatcher
  • @@ -145,47 +146,54 @@

    🐒 Usage

    Making, executing, cancelling and retrying Kommands:

    -
    Kommander().make {
    +
    Kommander().do {
         // Your code here
    -}.execute()
    +}.run()
     
    -
    Kommander().make {
    +
    Kommander().do {
         // Your code here
    -}.execute(after: .seconds(2))
    +}.run(after: .seconds(2))
     
    -
    Kommander().make {
    +
    Kommander().do {
         return "Your string"
     }.success { yourString in
         print(yourString)
    -}.execute()
    +}.run()
     
    -
    Kommander().make {
    +
    Kommander().do {
         throw CocoaError(.featureUnsupported)
     }.error { error in
         print(String(describing: error!))
    -}.execute()
    +}.run()
    +
    +
    Specify Error type:
    +
    Kommander().do {
    +    throw MyError.error
    +}.error(MyError.self) { error in
    +    // error is MyError? type.
    +}.run()
     
    Retry after cancellation:
    -
    let kommand = Kommander().make { () -> Any? in
    +
    let kommand = Kommander().do { () -> Any? in
         // Your code here
     }.success { result in
         // Your success handling here
     }.error { error in
         // Your error handling here
    -}.execute()
    +}.run()
     
     kommand.cancel()
     
     kommand.retry()
     
    Retry after failure:
    -
    let kommand = Kommander().make { () -> Any? in
    +
    let kommand = Kommander().do { () -> Any? in
         // Your code here
     }.error { error in
         // Your error handling here
     }.retry { error, executionCount in
         return executionCount < 2
    -}.execute()
    +}.run()
     

    Creating Kommanders:

    Kommander(deliverer: Dispatcher = .current, executor: Dispatcher = .default)
    @@ -249,8 +257,8 @@ 

    👮‍♂️ License

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/search.json b/docs/docsets/Kommander.docset/Contents/Resources/Documents/search.json index f168c2e..eaff3e4 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/search.json +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/search.json @@ -1 +1 @@ -{"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15recoveryOptionsSaySSGvp":{"name":"recoveryOptions","abstract":"

    Provides a set of possible recovery options to present to the user.

    ","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15attemptRecoverySbSi11optionIndex_tF":{"name":"attemptRecovery(optionIndex:)","abstract":"

    Attempt to recover from this error when the user selected the","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html":{"name":"KommandCancelledError","abstract":"

    Kommander cancelled error

    "},"Extensions/Array.html#/s:Sa9KommanderSo9OperationCRbzlE7executeySo0B5QueueC2by_Sb17waitUntilFinishedtF":{"name":"execute(by:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Array"},"Extensions/Array.html#/s:Sa9KommanderSo9OperationCRbzlE7executeyAA10DispatcherC2by_Sb17waitUntilFinishedtF":{"name":"execute(by:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in Dispatcher

    ","parent_name":"Array"},"Extensions/Array.html":{"name":"Array"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO13uninitializedAEyx_GAGmlF":{"name":"uninitialized","abstract":"

    Uninitialized state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO5readyAEyx_GAGmlF":{"name":"ready","abstract":"

    Ready state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO7runningAEyx_GAGmlF":{"name":"running","abstract":"

    Executing state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9succeededAEyx_GxcAGmlF":{"name":"succeeded","abstract":"

    Succeeded state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO6failedAEyx_Gs5Error_pcAGmlF":{"name":"failed","abstract":"

    Failed state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9cancelledAEyx_GAGmlF":{"name":"cancelled","abstract":"

    Cancelled state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:s9EquatableP2eeoiSbx_xtFZ":{"name":"==(_:_:)","parent_name":"State"},"Classes/Kommand/State.html":{"name":"State","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC13ActionClosurea":{"name":"ActionClosure","abstract":"

    Action closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC14SuccessClosurea":{"name":"SuccessClosure","abstract":"

    Success closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12ErrorClosurea":{"name":"ErrorClosure","abstract":"

    Error closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12RetryClosurea":{"name":"RetryClosure","abstract":"

    Retry closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5stateAC5StateOyx_Gvp":{"name":"state","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandCACyxGAA10DispatcherC9deliverer_AF8executorxyKc13actionClosuretcfc":{"name":"init(deliverer:executor:actionClosure:)","abstract":"

    Kommand instance with deliverer, executor and actionClosure returning generic and throwing errors

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7successACyxGXDyxcF":{"name":"success(_:)","abstract":"

    Specify Kommand success closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errorACyxGXDys5Error_pSgcF":{"name":"error(_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDSbs5Error_pSg_SutcF":{"name":"retry(_:)","abstract":"

    Specify Kommand retry closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6resultxSgvp":{"name":"result","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errors5Error_pSgvp":{"name":"error","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7executeACyxGXD8Dispatch0D12TimeIntervalO5after_tF":{"name":"execute(after:)","abstract":"

    Execute Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7executeACyxGXDyF":{"name":"execute()","abstract":"

    Execute Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancelACyxGXDSb_8Dispatch0D12TimeIntervalO5aftertF":{"name":"cancel(_:after:)","abstract":"

    Cancel Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancelACyxGXDSbF":{"name":"cancel(_:)","abstract":"

    Cancel Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXD8Dispatch0D12TimeIntervalO5after_tF":{"name":"retry(after:)","abstract":"

    Retry Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDyF":{"name":"retry()","abstract":"

    Retry Kommand

    ","parent_name":"Kommand"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC4mainACvpZ":{"name":"main","abstract":"

    Main queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7currentACvpZ":{"name":"current","abstract":"

    Current queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7defaultACvpZ":{"name":"default","abstract":"

    Dispatcher with default quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC15userInteractiveACvpZ":{"name":"userInteractive","abstract":"

    Dispatcher with user interactive quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC13userInitiatedACvpZ":{"name":"userInitiated","abstract":"

    Dispatcher with user initiated quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7utilityACvpZ":{"name":"utility","abstract":"

    Dispatcher with utility quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC10backgroundACvpZ":{"name":"background","abstract":"

    Dispatcher with background quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherCACSS4name_SC16QualityOfServiceO3qosSi23maxConcurrentOperationstcfc":{"name":"init(name:qos:maxConcurrentOperations:)","abstract":"

    Dispatcher instance with custom OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executeySo9OperationCF":{"name":"execute(_:)","abstract":"

    Execute Operation instance in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executeySaySo9OperationCG_Sb17waitUntilFinishedtF":{"name":"execute(_:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executeSo9OperationCyycF":{"name":"execute(_:)","abstract":"

    Execute closure in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executeSaySo9OperationCGSayyycG_Sb10concurrentSb17waitUntilFinishedtF":{"name":"execute(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [closure] collection in OperationQueue concurrently or sequentially

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executey8Dispatch0D12TimeIntervalO5after_yyc7closuretF":{"name":"execute(after:closure:)","abstract":"

    Execute closure in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executey8Dispatch0D12TimeIntervalO5after_AE0D8WorkItemC4worktF":{"name":"execute(after:work:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executey8Dispatch0D8WorkItemCF":{"name":"execute(_:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue

    ","parent_name":"Dispatcher"},"Classes/MainDispatcher.html#/s:9Kommander14MainDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with main OperationQueue

    ","parent_name":"MainDispatcher"},"Classes/Kommander.html#/s:9KommanderAAC4mainABvpZ":{"name":"main","abstract":"

    Kommander instance with CurrentDispatcher deliverer and MainDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7currentABvpZ":{"name":"current","abstract":"

    Kommander instance with CurrentDispatcher deliverer and CurrentDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7defaultABvpZ":{"name":"default","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with default quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC15userInteractiveABvpZ":{"name":"userInteractive","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user interactive quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC13userInitiatedABvpZ":{"name":"userInitiated","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user initiated quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7utilityABvpZ":{"name":"utility","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with utility quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC10backgroundABvpZ":{"name":"background","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with background quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAACAbA10DispatcherC9deliverer_AD8executortcfc":{"name":"init(deliverer:executor:)","abstract":"

    Kommander instance with deliverer and executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAACAbA10DispatcherC9deliverer_SS4nameSC16QualityOfServiceO3qosSi23maxConcurrentOperationstcfc":{"name":"init(deliverer:name:qos:maxConcurrentOperations:)","abstract":"

    Kommander instance with deliverer and custom OperationQueue executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC4makeAA7KommandCyxGxyKclF":{"name":"make(_:)","abstract":"

    Build Kommand instance with an actionClosure returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC4makeSayAA7KommandCyxGGSayxyKcGlF":{"name":"make(_:)","abstract":"

    Build [Kommand] instances collection with actionClosures returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7executeySayAA7KommandCyxGG_Sb10concurrentSb17waitUntilFinished8Dispatch0H12TimeIntervalO5aftertlF":{"name":"execute(_:concurrent:waitUntilFinished:after:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7executeySayAA7KommandCyxGG_Sb10concurrentSb17waitUntilFinishedtlF":{"name":"execute(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancelySayAA7KommandCyxGG_Sb13throwingError8Dispatch0F12TimeIntervalO5aftertlF":{"name":"cancel(_:throwingError:after:)","abstract":"

    Cancel [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancelySayAA7KommandCyxGG_Sb13throwingErrortlF":{"name":"cancel(_:throwingError:)","abstract":"

    Cancel [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retryySayAA7KommandCyxGG_8Dispatch0D12TimeIntervalO5aftertlF":{"name":"retry(_:after:)","abstract":"

    Retry [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retryySayAA7KommandCyxGGlF":{"name":"retry(_:)","abstract":"

    Retry [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/CurrentDispatcher.html#/s:9Kommander17CurrentDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with current OperationQueue

    ","parent_name":"CurrentDispatcher"},"Classes/CurrentDispatcher.html":{"name":"CurrentDispatcher","abstract":"

    Current queue dispatcher

    "},"Classes/Kommander.html":{"name":"Kommander","abstract":"

    Kommander manager

    "},"Classes/MainDispatcher.html":{"name":"MainDispatcher","abstract":"

    Main queue dispatcher

    "},"Classes/Dispatcher.html":{"name":"Dispatcher","abstract":"

    Dispatcher

    "},"Classes/Kommand.html":{"name":"Kommand","abstract":"

    Generic Kommand

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file +{"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15recoveryOptionsSaySSGvp":{"name":"recoveryOptions","abstract":"

    Provides a set of possible recovery options to present to the user.

    ","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15attemptRecoverySbSi11optionIndex_tF":{"name":"attemptRecovery(optionIndex:)","abstract":"

    Attempt to recover from this error when the user selected the","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html":{"name":"KommandCancelledError","abstract":"

    Kommander cancelled error

    "},"Extensions/Array.html#/s:Sa9KommanderSo9OperationCRbzlE3runySo0B5QueueC2in_Sb17waitUntilFinishedtF":{"name":"run(in:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Array"},"Extensions/Array.html#/s:Sa9KommanderSo9OperationCRbzlE3runyAA10DispatcherC2in_Sb17waitUntilFinishedtF":{"name":"run(in:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in Dispatcher

    ","parent_name":"Array"},"Extensions/Array.html":{"name":"Array"},"Classes/MainDispatcher.html#/s:9Kommander14MainDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with main OperationQueue

    ","parent_name":"MainDispatcher"},"Classes/Kommander.html#/s:9KommanderAAC4mainABvpZ":{"name":"main","abstract":"

    Kommander instance with CurrentDispatcher deliverer and MainDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7currentABvpZ":{"name":"current","abstract":"

    Kommander instance with CurrentDispatcher deliverer and CurrentDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7defaultABvpZ":{"name":"default","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with default quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC15userInteractiveABvpZ":{"name":"userInteractive","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user interactive quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC13userInitiatedABvpZ":{"name":"userInitiated","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user initiated quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7utilityABvpZ":{"name":"utility","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with utility quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC10backgroundABvpZ":{"name":"background","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with background quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAACAbA10DispatcherC9deliverer_AD8executortcfc":{"name":"init(deliverer:executor:)","abstract":"

    Kommander instance with deliverer and executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAACAbA10DispatcherC9deliverer_SS4nameSC16QualityOfServiceO3qosSi23maxConcurrentOperationstcfc":{"name":"init(deliverer:name:qos:maxConcurrentOperations:)","abstract":"

    Kommander instance with deliverer and custom OperationQueue executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC2doAA7KommandCyxGxyKclF":{"name":"do(_:)","abstract":"

    Build Kommand instance with an actionClosure returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC2doSayAA7KommandCyxGGSayxyKcGlF":{"name":"do(_:)","abstract":"

    Build [Kommand] instances collection with actionClosures returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC3runySayAA7KommandCyxGG_Sb10concurrentSb17waitUntilFinished8Dispatch0H12TimeIntervalO5aftertlF":{"name":"run(_:concurrent:waitUntilFinished:after:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC3runySayAA7KommandCyxGG_Sb10concurrentSb17waitUntilFinishedtlF":{"name":"run(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancelySayAA7KommandCyxGG_Sb13throwingError8Dispatch0F12TimeIntervalO5aftertlF":{"name":"cancel(_:throwingError:after:)","abstract":"

    Cancel [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancelySayAA7KommandCyxGG_Sb13throwingErrortlF":{"name":"cancel(_:throwingError:)","abstract":"

    Cancel [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retryySayAA7KommandCyxGG_8Dispatch0D12TimeIntervalO5aftertlF":{"name":"retry(_:after:)","abstract":"

    Retry [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retryySayAA7KommandCyxGGlF":{"name":"retry(_:)","abstract":"

    Retry [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO13uninitializedAEyx_GAGmlF":{"name":"uninitialized","abstract":"

    Uninitialized state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO5readyAEyx_GAGmlF":{"name":"ready","abstract":"

    Ready state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO7runningAEyx_GAGmlF":{"name":"running","abstract":"

    Executing state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9succeededAEyx_GxcAGmlF":{"name":"succeeded","abstract":"

    Succeeded state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO6failedAEyx_Gs5Error_pcAGmlF":{"name":"failed","abstract":"

    Failed state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9cancelledAEyx_GAGmlF":{"name":"cancelled","abstract":"

    Cancelled state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:s9EquatableP2eeoiSbx_xtFZ":{"name":"==(_:_:)","parent_name":"State"},"Classes/Kommand/State.html":{"name":"State","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC13ActionClosurea":{"name":"ActionClosure","abstract":"

    Action closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC14SuccessClosurea":{"name":"SuccessClosure","abstract":"

    Success closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12ErrorClosurea":{"name":"ErrorClosure","abstract":"

    Error closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12RetryClosurea":{"name":"RetryClosure","abstract":"

    Retry closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5stateAC5StateOyx_Gvp":{"name":"state","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandCACyxGAA10DispatcherC9deliverer_AF8executorxyKc13actionClosuretcfc":{"name":"init(deliverer:executor:actionClosure:)","abstract":"

    Kommand instance with deliverer, executor and actionClosure returning generic and throwing errors

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7successACyxGXDyxcF":{"name":"success(_:)","abstract":"

    Specify Kommand success closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errorACyxGXDys5Error_pSgcF":{"name":"error(_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errorACyxGXDqd__m_yqd__Sgcts5ErrorRd__lF":{"name":"error(_:_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDSbs5Error_pSg_SutcF":{"name":"retry(_:)","abstract":"

    Specify Kommand retry closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDqd__m_Sbqd__Sg_Sutcts5ErrorRd__lF":{"name":"retry(_:_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6resultxSgvp":{"name":"result","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errors5Error_pSgvp":{"name":"error","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC3runACyxGXD8Dispatch0D12TimeIntervalO5after_tF":{"name":"run(after:)","abstract":"

    Execute Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC3runACyxGXDyF":{"name":"run()","abstract":"

    Execute Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancelACyxGXDSb_8Dispatch0D12TimeIntervalO5aftertF":{"name":"cancel(_:after:)","abstract":"

    Cancel Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancelACyxGXDSbF":{"name":"cancel(_:)","abstract":"

    Cancel Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXD8Dispatch0D12TimeIntervalO5after_tF":{"name":"retry(after:)","abstract":"

    Retry Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDyF":{"name":"retry()","abstract":"

    Retry Kommand

    ","parent_name":"Kommand"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC4mainACvpZ":{"name":"main","abstract":"

    Main queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7currentACvpZ":{"name":"current","abstract":"

    Current queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7defaultACvpZ":{"name":"default","abstract":"

    Dispatcher with default quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC15userInteractiveACvpZ":{"name":"userInteractive","abstract":"

    Dispatcher with user interactive quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC13userInitiatedACvpZ":{"name":"userInitiated","abstract":"

    Dispatcher with user initiated quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7utilityACvpZ":{"name":"utility","abstract":"

    Dispatcher with utility quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC10backgroundACvpZ":{"name":"background","abstract":"

    Dispatcher with background quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherCACSS4name_SC16QualityOfServiceO3qosSi23maxConcurrentOperationstcfc":{"name":"init(name:qos:maxConcurrentOperations:)","abstract":"

    Dispatcher instance with custom OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runySo9OperationCF":{"name":"run(_:)","abstract":"

    Execute Operation instance in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runySaySo9OperationCG_Sb17waitUntilFinishedtF":{"name":"run(_:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runSo9OperationCyycF":{"name":"run(_:)","abstract":"

    Execute closure in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runSaySo9OperationCGSayyycG_Sb10concurrentSb17waitUntilFinishedtF":{"name":"run(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [closure] collection in OperationQueue concurrently or sequentially

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runy8Dispatch0D12TimeIntervalO5after_yyc7closuretF":{"name":"run(after:closure:)","abstract":"

    Execute closure in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runy8Dispatch0D12TimeIntervalO5after_AE0D8WorkItemC4worktF":{"name":"run(after:work:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runy8Dispatch0D8WorkItemCF":{"name":"run(_:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue

    ","parent_name":"Dispatcher"},"Classes/CurrentDispatcher.html#/s:9Kommander17CurrentDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with current OperationQueue

    ","parent_name":"CurrentDispatcher"},"Classes/CurrentDispatcher.html":{"name":"CurrentDispatcher","abstract":"

    Current queue dispatcher

    "},"Classes/Dispatcher.html":{"name":"Dispatcher","abstract":"

    Dispatcher

    "},"Classes/Kommand.html":{"name":"Kommand","abstract":"

    Generic Kommand

    "},"Classes/Kommander.html":{"name":"Kommander","abstract":"

    Kommander manager

    "},"Classes/MainDispatcher.html":{"name":"MainDispatcher","abstract":"

    Main queue dispatcher

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file diff --git a/docs/docsets/Kommander.docset/Contents/Resources/docSet.dsidx b/docs/docsets/Kommander.docset/Contents/Resources/docSet.dsidx index 128fc6faa62e6b8e27b5a4c9321ef1d8160770df..d223e09ff45fa05fba0ad858855954f89d8bd67d 100644 GIT binary patch delta 2780 zcmai0eN0=|6~Fh{?>@f|+YpS+!x%&OhVo&slVHB$@M#<{U`+U0fPhH|*aWcEP)gxV z(V}J38hTV!RjVv%I;rW}E-39(Ro$9NlQwl*w*ECGiw2RFt=0ZmI&D*wDb3z{h6E_- z{DG4!*_S)218V zWPZvWz-OtO>~E=J!{@ro++FRLbR+p5!)W~4*Mt|eje?WyXAyRi68aaK_jO*qz=hHI zm6>WN%fF<_)!JYow+k18ueOWH?jkuB3B$5@7-zxn3VQHf7^>^WnUGmqAY}Mxo49~$ zYVwENu+o?U*V~Nn*E$i~;U9%#I2~T`pP+0E{HrVvY*|6P5AM5z*afB40qlTlRSOAa zQzT22TsSm4J3YG*<)xG~_+h2qHZwLf6dsya9)aVd(K%P60_u`KroI--qkrV&)*{?jxcoiFj-p z&Nn(V z;6QXXHX4o1hUNmH(dfiN5&(a3k=7{T)YTa?h6}X~@Og;@6Lt%&kZx&ZW}$`+yywzomPmeN*?r%1j40Lad^chi79ESevTWRwyqo9@ zHz&+g!Um=*{ii~+Bg!Gw&(DuG)k=iaiBg-2TApr?4}Z;7$k+5K!!4V`P3o$)jc=+3 zU;7nY1rIZWxDt+gkKqF^dB^d7_-~t^akeYtG1yHlxB}ks#rSeBZ4nohfcfy5vphwK z=ut@3+c4i$I-?XqojRS-Tp3?Shq(}!z>QpA!ZVxhP;_>FOP#!H(ig<*BycQVC_{l* zbVsoijS#yiWnsv)^pip_ZMDVVYD)@CPuiiQS+CO%kRqGJVCb0a#ylKtK7s}K)Em}` zJ<6h34C@v@&Vv_Q$8j3`r?ngBfX_EcY~L2FMa6nNj#IdhmNRrITna3#+ zj+8<|xjpXva-SQU;71J-w!qtYpt6Xh4)g@UZ<=T_A@bi%rtQ!`3#YGn*h;N};p%Fx8m_3u2cn zr8mSLSxR$KyKx3Qms-HvX(S8k*YuPcO^17_V~mX;(JHy%f`5bxrNPgw+XB?o-w9jA_@03YgQECdyaQV`y4n5UjI!`;yHI2n$OU*eNZ1SvU`IS4yb zC`eUF1S$ECd$*^b>)j(SL)Ok6(%F%yn%THH^(oRR)h2*_;uCCywTWl30gjyPAbJ`p zlw57GJf>uiAn(N{X&~aY$;J$DO`2qCwoVQZE{+~@$I-2BJ=Ma(y-6?8(MUPzKO~tp zPnzmt;DxC!@Y{+E0!@&@K&AfTWc>yLrWhriR>gNd!9R`M*DfC&!Rghip)0)Emrw<^p3TACV;b`!v#C&^BmU&27yG znsb_<#;MU$U#!l&LM`p}(MWDE-`HPrS`|#ulXkMvgPs`F_F?zRX|v`$y}wkn&`54D zTl)+2JN8lq&EOj=fa{~(Ol1R&N-bV^&*7wc>tS`QmmfYvkSud~3Q@MHy2N@2Qe<86 z>{N9NuRTbRqUwrwr>GnG>^ha4F~z%0)B9`H>8u;m?XKw(T|I!O`ruSB>!&O?# zt2OVU=~7-5+)sE5yWvvepsea&B?g%TDi=kWivzmQez~G-l1!l|MS(AQf+*8gn@!-ZhA3@1z$s4-l-T))!eF?PRx Q4dlb3Wl(Mjw=BW`0d5CSEC2ui literal 28672 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 B`QHEl diff --git a/docs/index.html b/docs/index.html index f4d9d37..ec59b09 100644 --- a/docs/index.html +++ b/docs/index.html @@ -101,6 +101,7 @@

    🌟 Features

  • [x] Retry kommand or multiple kommands
  • [x] Set kommand success closure
  • [x] Set kommand error closure
  • +
  • [x] Set kommand error closure specifying Error type
  • [x] Main thread dispatcher
  • [x] Current thread dispatcher
  • [x] Custom OperationQueue dispatcher
  • @@ -145,47 +146,54 @@

    🐒 Usage

    Making, executing, cancelling and retrying Kommands:

    -
    Kommander().make {
    +
    Kommander().do {
         // Your code here
    -}.execute()
    +}.run()
     
    -
    Kommander().make {
    +
    Kommander().do {
         // Your code here
    -}.execute(after: .seconds(2))
    +}.run(after: .seconds(2))
     
    -
    Kommander().make {
    +
    Kommander().do {
         return "Your string"
     }.success { yourString in
         print(yourString)
    -}.execute()
    +}.run()
     
    -
    Kommander().make {
    +
    Kommander().do {
         throw CocoaError(.featureUnsupported)
     }.error { error in
         print(String(describing: error!))
    -}.execute()
    +}.run()
    +
    +
    Specify Error type:
    +
    Kommander().do {
    +    throw MyError.error
    +}.error(MyError.self) { error in
    +    // error is MyError? type.
    +}.run()
     
    Retry after cancellation:
    -
    let kommand = Kommander().make { () -> Any? in
    +
    let kommand = Kommander().do { () -> Any? in
         // Your code here
     }.success { result in
         // Your success handling here
     }.error { error in
         // Your error handling here
    -}.execute()
    +}.run()
     
     kommand.cancel()
     
     kommand.retry()
     
    Retry after failure:
    -
    let kommand = Kommander().make { () -> Any? in
    +
    let kommand = Kommander().do { () -> Any? in
         // Your code here
     }.error { error in
         // Your error handling here
     }.retry { error, executionCount in
         return executionCount < 2
    -}.execute()
    +}.run()
     

    Creating Kommanders:

    Kommander(deliverer: Dispatcher = .current, executor: Dispatcher = .default)
    @@ -249,8 +257,8 @@ 

    👮‍♂️ License

    diff --git a/docs/search.json b/docs/search.json index f168c2e..eaff3e4 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -{"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15recoveryOptionsSaySSGvp":{"name":"recoveryOptions","abstract":"

    Provides a set of possible recovery options to present to the user.

    ","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15attemptRecoverySbSi11optionIndex_tF":{"name":"attemptRecovery(optionIndex:)","abstract":"

    Attempt to recover from this error when the user selected the","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html":{"name":"KommandCancelledError","abstract":"

    Kommander cancelled error

    "},"Extensions/Array.html#/s:Sa9KommanderSo9OperationCRbzlE7executeySo0B5QueueC2by_Sb17waitUntilFinishedtF":{"name":"execute(by:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Array"},"Extensions/Array.html#/s:Sa9KommanderSo9OperationCRbzlE7executeyAA10DispatcherC2by_Sb17waitUntilFinishedtF":{"name":"execute(by:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in Dispatcher

    ","parent_name":"Array"},"Extensions/Array.html":{"name":"Array"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO13uninitializedAEyx_GAGmlF":{"name":"uninitialized","abstract":"

    Uninitialized state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO5readyAEyx_GAGmlF":{"name":"ready","abstract":"

    Ready state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO7runningAEyx_GAGmlF":{"name":"running","abstract":"

    Executing state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9succeededAEyx_GxcAGmlF":{"name":"succeeded","abstract":"

    Succeeded state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO6failedAEyx_Gs5Error_pcAGmlF":{"name":"failed","abstract":"

    Failed state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9cancelledAEyx_GAGmlF":{"name":"cancelled","abstract":"

    Cancelled state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:s9EquatableP2eeoiSbx_xtFZ":{"name":"==(_:_:)","parent_name":"State"},"Classes/Kommand/State.html":{"name":"State","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC13ActionClosurea":{"name":"ActionClosure","abstract":"

    Action closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC14SuccessClosurea":{"name":"SuccessClosure","abstract":"

    Success closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12ErrorClosurea":{"name":"ErrorClosure","abstract":"

    Error closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12RetryClosurea":{"name":"RetryClosure","abstract":"

    Retry closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5stateAC5StateOyx_Gvp":{"name":"state","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandCACyxGAA10DispatcherC9deliverer_AF8executorxyKc13actionClosuretcfc":{"name":"init(deliverer:executor:actionClosure:)","abstract":"

    Kommand instance with deliverer, executor and actionClosure returning generic and throwing errors

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7successACyxGXDyxcF":{"name":"success(_:)","abstract":"

    Specify Kommand success closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errorACyxGXDys5Error_pSgcF":{"name":"error(_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDSbs5Error_pSg_SutcF":{"name":"retry(_:)","abstract":"

    Specify Kommand retry closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6resultxSgvp":{"name":"result","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errors5Error_pSgvp":{"name":"error","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7executeACyxGXD8Dispatch0D12TimeIntervalO5after_tF":{"name":"execute(after:)","abstract":"

    Execute Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7executeACyxGXDyF":{"name":"execute()","abstract":"

    Execute Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancelACyxGXDSb_8Dispatch0D12TimeIntervalO5aftertF":{"name":"cancel(_:after:)","abstract":"

    Cancel Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancelACyxGXDSbF":{"name":"cancel(_:)","abstract":"

    Cancel Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXD8Dispatch0D12TimeIntervalO5after_tF":{"name":"retry(after:)","abstract":"

    Retry Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDyF":{"name":"retry()","abstract":"

    Retry Kommand

    ","parent_name":"Kommand"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC4mainACvpZ":{"name":"main","abstract":"

    Main queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7currentACvpZ":{"name":"current","abstract":"

    Current queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7defaultACvpZ":{"name":"default","abstract":"

    Dispatcher with default quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC15userInteractiveACvpZ":{"name":"userInteractive","abstract":"

    Dispatcher with user interactive quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC13userInitiatedACvpZ":{"name":"userInitiated","abstract":"

    Dispatcher with user initiated quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7utilityACvpZ":{"name":"utility","abstract":"

    Dispatcher with utility quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC10backgroundACvpZ":{"name":"background","abstract":"

    Dispatcher with background quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherCACSS4name_SC16QualityOfServiceO3qosSi23maxConcurrentOperationstcfc":{"name":"init(name:qos:maxConcurrentOperations:)","abstract":"

    Dispatcher instance with custom OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executeySo9OperationCF":{"name":"execute(_:)","abstract":"

    Execute Operation instance in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executeySaySo9OperationCG_Sb17waitUntilFinishedtF":{"name":"execute(_:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executeSo9OperationCyycF":{"name":"execute(_:)","abstract":"

    Execute closure in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executeSaySo9OperationCGSayyycG_Sb10concurrentSb17waitUntilFinishedtF":{"name":"execute(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [closure] collection in OperationQueue concurrently or sequentially

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executey8Dispatch0D12TimeIntervalO5after_yyc7closuretF":{"name":"execute(after:closure:)","abstract":"

    Execute closure in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executey8Dispatch0D12TimeIntervalO5after_AE0D8WorkItemC4worktF":{"name":"execute(after:work:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executey8Dispatch0D8WorkItemCF":{"name":"execute(_:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue

    ","parent_name":"Dispatcher"},"Classes/MainDispatcher.html#/s:9Kommander14MainDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with main OperationQueue

    ","parent_name":"MainDispatcher"},"Classes/Kommander.html#/s:9KommanderAAC4mainABvpZ":{"name":"main","abstract":"

    Kommander instance with CurrentDispatcher deliverer and MainDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7currentABvpZ":{"name":"current","abstract":"

    Kommander instance with CurrentDispatcher deliverer and CurrentDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7defaultABvpZ":{"name":"default","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with default quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC15userInteractiveABvpZ":{"name":"userInteractive","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user interactive quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC13userInitiatedABvpZ":{"name":"userInitiated","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user initiated quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7utilityABvpZ":{"name":"utility","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with utility quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC10backgroundABvpZ":{"name":"background","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with background quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAACAbA10DispatcherC9deliverer_AD8executortcfc":{"name":"init(deliverer:executor:)","abstract":"

    Kommander instance with deliverer and executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAACAbA10DispatcherC9deliverer_SS4nameSC16QualityOfServiceO3qosSi23maxConcurrentOperationstcfc":{"name":"init(deliverer:name:qos:maxConcurrentOperations:)","abstract":"

    Kommander instance with deliverer and custom OperationQueue executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC4makeAA7KommandCyxGxyKclF":{"name":"make(_:)","abstract":"

    Build Kommand instance with an actionClosure returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC4makeSayAA7KommandCyxGGSayxyKcGlF":{"name":"make(_:)","abstract":"

    Build [Kommand] instances collection with actionClosures returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7executeySayAA7KommandCyxGG_Sb10concurrentSb17waitUntilFinished8Dispatch0H12TimeIntervalO5aftertlF":{"name":"execute(_:concurrent:waitUntilFinished:after:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7executeySayAA7KommandCyxGG_Sb10concurrentSb17waitUntilFinishedtlF":{"name":"execute(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancelySayAA7KommandCyxGG_Sb13throwingError8Dispatch0F12TimeIntervalO5aftertlF":{"name":"cancel(_:throwingError:after:)","abstract":"

    Cancel [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancelySayAA7KommandCyxGG_Sb13throwingErrortlF":{"name":"cancel(_:throwingError:)","abstract":"

    Cancel [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retryySayAA7KommandCyxGG_8Dispatch0D12TimeIntervalO5aftertlF":{"name":"retry(_:after:)","abstract":"

    Retry [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retryySayAA7KommandCyxGGlF":{"name":"retry(_:)","abstract":"

    Retry [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/CurrentDispatcher.html#/s:9Kommander17CurrentDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with current OperationQueue

    ","parent_name":"CurrentDispatcher"},"Classes/CurrentDispatcher.html":{"name":"CurrentDispatcher","abstract":"

    Current queue dispatcher

    "},"Classes/Kommander.html":{"name":"Kommander","abstract":"

    Kommander manager

    "},"Classes/MainDispatcher.html":{"name":"MainDispatcher","abstract":"

    Main queue dispatcher

    "},"Classes/Dispatcher.html":{"name":"Dispatcher","abstract":"

    Dispatcher

    "},"Classes/Kommand.html":{"name":"Kommand","abstract":"

    Generic Kommand

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file +{"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15recoveryOptionsSaySSGvp":{"name":"recoveryOptions","abstract":"

    Provides a set of possible recovery options to present to the user.

    ","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15attemptRecoverySbSi11optionIndex_tF":{"name":"attemptRecovery(optionIndex:)","abstract":"

    Attempt to recover from this error when the user selected the","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html":{"name":"KommandCancelledError","abstract":"

    Kommander cancelled error

    "},"Extensions/Array.html#/s:Sa9KommanderSo9OperationCRbzlE3runySo0B5QueueC2in_Sb17waitUntilFinishedtF":{"name":"run(in:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Array"},"Extensions/Array.html#/s:Sa9KommanderSo9OperationCRbzlE3runyAA10DispatcherC2in_Sb17waitUntilFinishedtF":{"name":"run(in:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in Dispatcher

    ","parent_name":"Array"},"Extensions/Array.html":{"name":"Array"},"Classes/MainDispatcher.html#/s:9Kommander14MainDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with main OperationQueue

    ","parent_name":"MainDispatcher"},"Classes/Kommander.html#/s:9KommanderAAC4mainABvpZ":{"name":"main","abstract":"

    Kommander instance with CurrentDispatcher deliverer and MainDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7currentABvpZ":{"name":"current","abstract":"

    Kommander instance with CurrentDispatcher deliverer and CurrentDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7defaultABvpZ":{"name":"default","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with default quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC15userInteractiveABvpZ":{"name":"userInteractive","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user interactive quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC13userInitiatedABvpZ":{"name":"userInitiated","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user initiated quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7utilityABvpZ":{"name":"utility","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with utility quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC10backgroundABvpZ":{"name":"background","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with background quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAACAbA10DispatcherC9deliverer_AD8executortcfc":{"name":"init(deliverer:executor:)","abstract":"

    Kommander instance with deliverer and executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAACAbA10DispatcherC9deliverer_SS4nameSC16QualityOfServiceO3qosSi23maxConcurrentOperationstcfc":{"name":"init(deliverer:name:qos:maxConcurrentOperations:)","abstract":"

    Kommander instance with deliverer and custom OperationQueue executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC2doAA7KommandCyxGxyKclF":{"name":"do(_:)","abstract":"

    Build Kommand instance with an actionClosure returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC2doSayAA7KommandCyxGGSayxyKcGlF":{"name":"do(_:)","abstract":"

    Build [Kommand] instances collection with actionClosures returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC3runySayAA7KommandCyxGG_Sb10concurrentSb17waitUntilFinished8Dispatch0H12TimeIntervalO5aftertlF":{"name":"run(_:concurrent:waitUntilFinished:after:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC3runySayAA7KommandCyxGG_Sb10concurrentSb17waitUntilFinishedtlF":{"name":"run(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancelySayAA7KommandCyxGG_Sb13throwingError8Dispatch0F12TimeIntervalO5aftertlF":{"name":"cancel(_:throwingError:after:)","abstract":"

    Cancel [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancelySayAA7KommandCyxGG_Sb13throwingErrortlF":{"name":"cancel(_:throwingError:)","abstract":"

    Cancel [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retryySayAA7KommandCyxGG_8Dispatch0D12TimeIntervalO5aftertlF":{"name":"retry(_:after:)","abstract":"

    Retry [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retryySayAA7KommandCyxGGlF":{"name":"retry(_:)","abstract":"

    Retry [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO13uninitializedAEyx_GAGmlF":{"name":"uninitialized","abstract":"

    Uninitialized state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO5readyAEyx_GAGmlF":{"name":"ready","abstract":"

    Ready state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO7runningAEyx_GAGmlF":{"name":"running","abstract":"

    Executing state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9succeededAEyx_GxcAGmlF":{"name":"succeeded","abstract":"

    Succeeded state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO6failedAEyx_Gs5Error_pcAGmlF":{"name":"failed","abstract":"

    Failed state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9cancelledAEyx_GAGmlF":{"name":"cancelled","abstract":"

    Cancelled state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:s9EquatableP2eeoiSbx_xtFZ":{"name":"==(_:_:)","parent_name":"State"},"Classes/Kommand/State.html":{"name":"State","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC13ActionClosurea":{"name":"ActionClosure","abstract":"

    Action closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC14SuccessClosurea":{"name":"SuccessClosure","abstract":"

    Success closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12ErrorClosurea":{"name":"ErrorClosure","abstract":"

    Error closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12RetryClosurea":{"name":"RetryClosure","abstract":"

    Retry closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5stateAC5StateOyx_Gvp":{"name":"state","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandCACyxGAA10DispatcherC9deliverer_AF8executorxyKc13actionClosuretcfc":{"name":"init(deliverer:executor:actionClosure:)","abstract":"

    Kommand instance with deliverer, executor and actionClosure returning generic and throwing errors

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7successACyxGXDyxcF":{"name":"success(_:)","abstract":"

    Specify Kommand success closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errorACyxGXDys5Error_pSgcF":{"name":"error(_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errorACyxGXDqd__m_yqd__Sgcts5ErrorRd__lF":{"name":"error(_:_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDSbs5Error_pSg_SutcF":{"name":"retry(_:)","abstract":"

    Specify Kommand retry closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDqd__m_Sbqd__Sg_Sutcts5ErrorRd__lF":{"name":"retry(_:_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6resultxSgvp":{"name":"result","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errors5Error_pSgvp":{"name":"error","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC3runACyxGXD8Dispatch0D12TimeIntervalO5after_tF":{"name":"run(after:)","abstract":"

    Execute Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC3runACyxGXDyF":{"name":"run()","abstract":"

    Execute Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancelACyxGXDSb_8Dispatch0D12TimeIntervalO5aftertF":{"name":"cancel(_:after:)","abstract":"

    Cancel Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancelACyxGXDSbF":{"name":"cancel(_:)","abstract":"

    Cancel Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXD8Dispatch0D12TimeIntervalO5after_tF":{"name":"retry(after:)","abstract":"

    Retry Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDyF":{"name":"retry()","abstract":"

    Retry Kommand

    ","parent_name":"Kommand"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC4mainACvpZ":{"name":"main","abstract":"

    Main queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7currentACvpZ":{"name":"current","abstract":"

    Current queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7defaultACvpZ":{"name":"default","abstract":"

    Dispatcher with default quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC15userInteractiveACvpZ":{"name":"userInteractive","abstract":"

    Dispatcher with user interactive quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC13userInitiatedACvpZ":{"name":"userInitiated","abstract":"

    Dispatcher with user initiated quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7utilityACvpZ":{"name":"utility","abstract":"

    Dispatcher with utility quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC10backgroundACvpZ":{"name":"background","abstract":"

    Dispatcher with background quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherCACSS4name_SC16QualityOfServiceO3qosSi23maxConcurrentOperationstcfc":{"name":"init(name:qos:maxConcurrentOperations:)","abstract":"

    Dispatcher instance with custom OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runySo9OperationCF":{"name":"run(_:)","abstract":"

    Execute Operation instance in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runySaySo9OperationCG_Sb17waitUntilFinishedtF":{"name":"run(_:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runSo9OperationCyycF":{"name":"run(_:)","abstract":"

    Execute closure in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runSaySo9OperationCGSayyycG_Sb10concurrentSb17waitUntilFinishedtF":{"name":"run(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [closure] collection in OperationQueue concurrently or sequentially

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runy8Dispatch0D12TimeIntervalO5after_yyc7closuretF":{"name":"run(after:closure:)","abstract":"

    Execute closure in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runy8Dispatch0D12TimeIntervalO5after_AE0D8WorkItemC4worktF":{"name":"run(after:work:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runy8Dispatch0D8WorkItemCF":{"name":"run(_:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue

    ","parent_name":"Dispatcher"},"Classes/CurrentDispatcher.html#/s:9Kommander17CurrentDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with current OperationQueue

    ","parent_name":"CurrentDispatcher"},"Classes/CurrentDispatcher.html":{"name":"CurrentDispatcher","abstract":"

    Current queue dispatcher

    "},"Classes/Dispatcher.html":{"name":"Dispatcher","abstract":"

    Dispatcher

    "},"Classes/Kommand.html":{"name":"Kommand","abstract":"

    Generic Kommand

    "},"Classes/Kommander.html":{"name":"Kommander","abstract":"

    Kommander manager

    "},"Classes/MainDispatcher.html":{"name":"MainDispatcher","abstract":"

    Main queue dispatcher

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file From 719242447662e867f9a805726a3da9a7bb711544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Rupe=CC=81rez?= Date: Mon, 27 Aug 2018 10:48:16 +0200 Subject: [PATCH 2/5] Code style fix. --- Source/Dispatcher.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Source/Dispatcher.swift b/Source/Dispatcher.swift index f7318a9..4707e31 100755 --- a/Source/Dispatcher.swift +++ b/Source/Dispatcher.swift @@ -96,6 +96,7 @@ open class Dispatcher { } public extension Array where Element: Operation { + /// Execute [Operation] instance collection in OperationQueue public func run(in operationQueue: OperationQueue, waitUntilFinished: Bool = false) { operationQueue.addOperations(self, waitUntilFinished: waitUntilFinished) @@ -105,6 +106,7 @@ public extension Array where Element: Operation { public func run(in dispatcher: Dispatcher, waitUntilFinished: Bool = false) { dispatcher.run(self, waitUntilFinished: waitUntilFinished) } + } private extension Dispatcher { From 645363a7cf20bed784e80ccc7f4a41ff1ee1f426 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Rupe=CC=81rez?= Date: Thu, 30 Aug 2018 09:40:56 +0200 Subject: [PATCH 3/5] Fixed error(Error.self) behaviour. --- Major/ViewController.swift | 4 ++-- README.md | 2 +- Source/Kommand.swift | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Major/ViewController.swift b/Major/ViewController.swift index b67aca0..d33070f 100755 --- a/Major/ViewController.swift +++ b/Major/ViewController.swift @@ -59,8 +59,8 @@ class ViewController: UIViewController { kommander.do { sleep(self.sleepTime) throw CocoaError(.featureUnsupported) - }.error(CocoaError.self) { error in - print("Error: " + String(describing: error!)) + }.error(CocoaError.self) { + print("Error: " + $0.localizedDescription) }.run() } diff --git a/README.md b/README.md index 6d8e695..dbc47a8 100755 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ Kommander().do { Kommander().do { throw MyError.error }.error(MyError.self) { error in - // error is MyError? type. + // error is MyError type. }.run() ``` diff --git a/Source/Kommand.swift b/Source/Kommand.swift index 33dff1f..f6d62c1 100644 --- a/Source/Kommand.swift +++ b/Source/Kommand.swift @@ -108,10 +108,9 @@ open class Kommand { } /// Specify Kommand error closure - @discardableResult open func error(_ type: Reason.Type, _ error: @escaping (_ error: Reason?) -> Void) -> Self { + @discardableResult open func error(_ type: Reason.Type, _ error: @escaping (_ error: Reason) -> Void) -> Self { self.errorClosure = { guard let reason = $0 as? Reason else { - error(nil) return } error(reason) From 07f1155ef12ab1d57383a0ba89faa924d85ccf99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Rupe=CC=81rez?= Date: Tue, 11 Sep 2018 15:31:05 +0200 Subject: [PATCH 4/5] Renaming undone. --- KommanderTests/DispatcherTests.swift | 14 ++++++------ KommanderTests/KommanderTests.swift | 34 ++++++++++++++-------------- Major/ViewController.swift | 16 ++++++------- README.md | 28 +++++++++++------------ Source/Dispatcher.swift | 24 ++++++++++---------- Source/Kommand.swift | 25 ++++++++++---------- Source/Kommander.swift | 24 ++++++++++---------- 7 files changed, 83 insertions(+), 82 deletions(-) diff --git a/KommanderTests/DispatcherTests.swift b/KommanderTests/DispatcherTests.swift index 89d4ecf..5be33f5 100644 --- a/KommanderTests/DispatcherTests.swift +++ b/KommanderTests/DispatcherTests.swift @@ -32,7 +32,7 @@ class DispatcherTests: XCTestCase { } func testDefaultDispatcherOperationQueue() { - let operation = dispatcher.run({ sleep(2) }) + let operation = dispatcher.execute({ sleep(2) }) XCTAssertGreaterThan(dispatcher.operationQueue.operationCount, 0) operation.cancel() XCTAssertTrue(operation.isCancelled) @@ -40,7 +40,7 @@ class DispatcherTests: XCTestCase { func testDefaultDispatcherDispatchQueue() { let dispatchWorkItem = DispatchWorkItem(qos: .default, flags: .assignCurrentContext) { sleep(2) } - dispatcher.run(dispatchWorkItem) + dispatcher.execute(dispatchWorkItem) XCTAssertFalse(dispatchWorkItem.isCancelled) dispatchWorkItem.cancel() XCTAssertTrue(dispatchWorkItem.isCancelled) @@ -52,7 +52,7 @@ class DispatcherTests: XCTestCase { XCTAssertEqual(dispatcher.operationQueue.name, randomName) XCTAssertEqual(dispatcher.operationQueue.maxConcurrentOperationCount, 1) XCTAssertEqual(dispatcher.operationQueue.qualityOfService, .background) - let operation = dispatcher.run({ sleep(2) }) + let operation = dispatcher.execute({ sleep(2) }) XCTAssertGreaterThan(dispatcher.operationQueue.operationCount, 0) operation.cancel() XCTAssertTrue(operation.isCancelled) @@ -60,7 +60,7 @@ class DispatcherTests: XCTestCase { func testMainDispatcherOperationQueue() { dispatcher = .main - let operation = dispatcher.run({ sleep(2) }) + let operation = dispatcher.execute({ sleep(2) }) XCTAssertEqual(dispatcher.operationQueue, OperationQueue.main) XCTAssertGreaterThan(dispatcher.operationQueue.operationCount, 0) operation.cancel() @@ -70,7 +70,7 @@ class DispatcherTests: XCTestCase { func testMainDispatcherDispatchQueue() { dispatcher = .main let dispatchWorkItem = DispatchWorkItem(qos: .default, flags: .assignCurrentContext) { sleep(2) } - dispatcher.run(dispatchWorkItem) + dispatcher.execute(dispatchWorkItem) XCTAssertEqual(dispatcher.dispatchQueue, DispatchQueue.main) XCTAssertFalse(dispatchWorkItem.isCancelled) dispatchWorkItem.cancel() @@ -81,7 +81,7 @@ class DispatcherTests: XCTestCase { let operationQueue = OperationQueue() operationQueue.addOperation { self.dispatcher = .current - let operation = self.dispatcher.run({ sleep(2) }) + let operation = self.dispatcher.execute({ sleep(2) }) XCTAssertGreaterThan(self.dispatcher.operationQueue.operationCount, 0) operation.cancel() XCTAssertTrue(operation.isCancelled) @@ -93,7 +93,7 @@ class DispatcherTests: XCTestCase { dispatchQueue.async { self.dispatcher = .current let dispatchWorkItem = DispatchWorkItem(qos: .default, flags: .assignCurrentContext) { sleep(2) } - self.dispatcher.run(dispatchWorkItem) + self.dispatcher.execute(dispatchWorkItem) XCTAssertFalse(dispatchWorkItem.isCancelled) dispatchWorkItem.cancel() XCTAssertTrue(dispatchWorkItem.isCancelled) diff --git a/KommanderTests/KommanderTests.swift b/KommanderTests/KommanderTests.swift index b5af6b7..6031141 100755 --- a/KommanderTests/KommanderTests.swift +++ b/KommanderTests/KommanderTests.swift @@ -33,7 +33,7 @@ class KommanderTests: XCTestCase { .error({ (error) in ex.fulfill() XCTFail() - }).run() + }).execute() waitForExpectations(timeout: 100, handler: nil) } @@ -54,7 +54,7 @@ class KommanderTests: XCTestCase { .error({ (error) in ex.fulfill() XCTFail() - }).run() + }).execute() let k2 = interactor.getCounter(name: "C2", to: 5) .success({ (name) in @@ -66,10 +66,10 @@ class KommanderTests: XCTestCase { .error({ (error) in ex.fulfill() XCTFail() - }).run() + }).execute() - k1.run() - k2.run() + k1.execute() + k2.execute() waitForExpectations(timeout: 100, handler: nil) } @@ -93,7 +93,7 @@ class KommanderTests: XCTestCase { ex.fulfill() XCTFail() }) - .run(after: .seconds(1)) + .execute(after: .seconds(1)) } waitForExpectations(timeout: 100, handler: nil) @@ -118,7 +118,7 @@ class KommanderTests: XCTestCase { ex.fulfill() } }) - .run() + .execute() .cancel(true, after: .seconds(2)) } @@ -145,7 +145,7 @@ class KommanderTests: XCTestCase { ex.fulfill() XCTFail() }) - .run() + .execute() .cancel(false, after: .seconds(2)) .retry(after: .seconds(5)) } @@ -181,7 +181,7 @@ class KommanderTests: XCTestCase { let secondRecoverySuccess = error.attemptRecovery(optionIndex: 0) XCTAssertFalse(secondRecoverySuccess) }) - .run() + .execute() .cancel(true, after: .seconds(2)) } @@ -196,7 +196,7 @@ class KommanderTests: XCTestCase { var executions = 0 let retries = Int(arc4random_uniform(10) + 1) - kommander.do({ + kommander.make({ print("Execution: \(executions)") if throwingError { throw CocoaError(.featureUnsupported) @@ -217,7 +217,7 @@ class KommanderTests: XCTestCase { } executions += 1 return true - }).run() + }).execute() waitForExpectations(timeout: 100, handler: nil) } @@ -241,7 +241,7 @@ class KommanderTests: XCTestCase { ex.fulfill() XCTFail() }) - .run() + .execute() } waitForExpectations(timeout: 100, handler: nil) @@ -270,7 +270,7 @@ class KommanderTests: XCTestCase { })) } - interactor.kommander.run(kommands, concurrent: true, waitUntilFinished: true) + interactor.kommander.execute(kommands, concurrent: true, waitUntilFinished: true) waitForExpectations(timeout: 100, handler: nil) } @@ -298,7 +298,7 @@ class KommanderTests: XCTestCase { })) } - interactor.kommander.run(kommands, concurrent: true, waitUntilFinished: false) + interactor.kommander.execute(kommands, concurrent: true, waitUntilFinished: false) waitForExpectations(timeout: 100, handler: nil) } @@ -326,7 +326,7 @@ class KommanderTests: XCTestCase { })) } - interactor.kommander.run(kommands, concurrent: false, waitUntilFinished: true) + interactor.kommander.execute(kommands, concurrent: false, waitUntilFinished: true) waitForExpectations(timeout: 100, handler: nil) } @@ -354,7 +354,7 @@ class KommanderTests: XCTestCase { })) } - interactor.kommander.run(kommands, concurrent: false, waitUntilFinished: false) + interactor.kommander.execute(kommands, concurrent: false, waitUntilFinished: false) waitForExpectations(timeout: 100, handler: nil) } @@ -386,7 +386,7 @@ extension KommanderTests { } func getCounter(name: String, to: Int) -> Kommand { - return kommander.do({ () -> String in + return kommander.make({ () -> String in print ("\(name) Starts") var cont = 0 while cont < to { diff --git a/Major/ViewController.swift b/Major/ViewController.swift index d33070f..c9c8fb0 100755 --- a/Major/ViewController.swift +++ b/Major/ViewController.swift @@ -15,16 +15,16 @@ class ViewController: UIViewController { let sleepTime: UInt32 = 2 @IBAction func singleAction(_ sender: UIButton) { - kommander.do { () -> TimeInterval in + kommander.make { () -> TimeInterval in sleep(self.sleepTime) return Date().timeIntervalSince1970 }.success { result in print("Single: " + String(describing: result)) - }.run() + }.execute() } @IBAction func concurrentAction(_ sender: UIButton) { - kommander.run(kommander.do([ { () -> Any? in + kommander.execute(kommander.make([ { () -> Any? in sleep(self.sleepTime) print("Concurrent first: " + String(describing: Date().timeIntervalSince1970)) return nil @@ -40,7 +40,7 @@ class ViewController: UIViewController { } @IBAction func sequentialAction(_ sender: UIButton) { - kommander.run(kommander.do([ { () -> Any? in + kommander.execute(kommander.make([ { () -> Any? in sleep(self.sleepTime) print("Sequential first: " + String(describing: Date().timeIntervalSince1970)) return nil @@ -56,18 +56,18 @@ class ViewController: UIViewController { } @IBAction func errorAction(_ sender: UIButton) { - kommander.do { + kommander.make { sleep(self.sleepTime) throw CocoaError(.featureUnsupported) }.error(CocoaError.self) { print("Error: " + $0.localizedDescription) - }.run() + }.execute() } @IBAction func crashAction(_ sender: UIButton) { - kommander.do { + kommander.make { sleep(self.sleepTime) fatalError() - }.run() + }.execute() } } diff --git a/README.md b/README.md index dbc47a8..5b82d4c 100755 --- a/README.md +++ b/README.md @@ -90,53 +90,53 @@ dependencies: [ #### Making, executing, cancelling and retrying Kommands: ```swift -Kommander().do { +Kommander().make { // Your code here -}.run() +}.execute() ``` ```swift -Kommander().do { +Kommander().make { // Your code here -}.run(after: .seconds(2)) +}.execute(after: .seconds(2)) ``` ```swift -Kommander().do { +Kommander().make { return "Your string" }.success { yourString in print(yourString) -}.run() +}.execute() ``` ```swift -Kommander().do { +Kommander().make { throw CocoaError(.featureUnsupported) }.error { error in print(String(describing: error!)) -}.run() +}.execute() ``` ##### Specify Error type: ```swift -Kommander().do { +Kommander().make { throw MyError.error }.error(MyError.self) { error in // error is MyError type. -}.run() +}.execute() ``` ##### Retry after cancellation: ```swift -let kommand = Kommander().do { () -> Any? in +let kommand = Kommander().make { () -> Any? in // Your code here }.success { result in // Your success handling here }.error { error in // Your error handling here -}.run() +}.execute() kommand.cancel() @@ -146,13 +146,13 @@ kommand.retry() ##### Retry after failure: ```swift -let kommand = Kommander().do { () -> Any? in +let kommand = Kommander().make { () -> Any? in // Your code here }.error { error in // Your error handling here }.retry { error, executionCount in return executionCount < 2 -}.run() +}.execute() ``` #### Creating Kommanders: diff --git a/Source/Dispatcher.swift b/Source/Dispatcher.swift index 4707e31..c4479db 100755 --- a/Source/Dispatcher.swift +++ b/Source/Dispatcher.swift @@ -40,24 +40,24 @@ open class Dispatcher { } /// Execute Operation instance in OperationQueue - open func run(_ operation: Operation) { + open func execute(_ operation: Operation) { operationQueue.addOperation(operation) } /// Execute [Operation] instance collection in OperationQueue - open func run(_ operations: [Operation], waitUntilFinished: Bool = false) { + open func execute(_ operations: [Operation], waitUntilFinished: Bool = false) { operationQueue.addOperations(operations, waitUntilFinished: waitUntilFinished) } /// Execute closure in OperationQueue - @discardableResult open func run(_ closure: @escaping () -> Void) -> Operation { + @discardableResult open func execute(_ closure: @escaping () -> Void) -> Operation { let operation = BlockOperation(block: closure) - run(operation) + execute(operation) return operation } /// Execute [closure] collection in OperationQueue concurrently or sequentially - @discardableResult open func run(_ closures: [() -> Void], concurrent: Bool = true, waitUntilFinished: Bool = false) -> [Operation] { + @discardableResult open func execute(_ closures: [() -> Void], concurrent: Bool = true, waitUntilFinished: Bool = false) -> [Operation] { var lastOperation: Operation? let operations = closures.map { closure -> Operation in let operation = BlockOperation(block: closure) @@ -67,12 +67,12 @@ open class Dispatcher { lastOperation = operation return operation } - run(operations, waitUntilFinished: waitUntilFinished) + execute(operations, waitUntilFinished: waitUntilFinished) return operations } /// Execute closure in DispatchQueue after delay - open func run(after delay: DispatchTimeInterval, closure: @escaping () -> Void) { + open func execute(after delay: DispatchTimeInterval, closure: @escaping () -> Void) { guard delay != .never else { return } @@ -80,7 +80,7 @@ open class Dispatcher { } /// Execute DispatchWorkItem instance in DispatchQueue after delay - open func run(after delay: DispatchTimeInterval, work: DispatchWorkItem) { + open func execute(after delay: DispatchTimeInterval, work: DispatchWorkItem) { guard delay != .never else { work.cancel() return @@ -89,7 +89,7 @@ open class Dispatcher { } /// Execute DispatchWorkItem instance in DispatchQueue - open func run(_ work: DispatchWorkItem) { + open func execute(_ work: DispatchWorkItem) { dispatchQueue.async(execute: work) } @@ -98,13 +98,13 @@ open class Dispatcher { public extension Array where Element: Operation { /// Execute [Operation] instance collection in OperationQueue - public func run(in operationQueue: OperationQueue, waitUntilFinished: Bool = false) { + public func execute(in operationQueue: OperationQueue, waitUntilFinished: Bool = false) { operationQueue.addOperations(self, waitUntilFinished: waitUntilFinished) } /// Execute [Operation] instance collection in Dispatcher - public func run(in dispatcher: Dispatcher, waitUntilFinished: Bool = false) { - dispatcher.run(self, waitUntilFinished: waitUntilFinished) + public func execute(in dispatcher: Dispatcher, waitUntilFinished: Bool = false) { + dispatcher.execute(self, waitUntilFinished: waitUntilFinished) } } diff --git a/Source/Kommand.swift b/Source/Kommand.swift index f6d62c1..c579efb 100644 --- a/Source/Kommand.swift +++ b/Source/Kommand.swift @@ -111,6 +111,7 @@ open class Kommand { @discardableResult open func error(_ type: Reason.Type, _ error: @escaping (_ error: Reason) -> Void) -> Self { self.errorClosure = { guard let reason = $0 as? Reason else { + assertionFailure("Unexpected error thrown. \(Reason.self) expected, \($0.debugDescription) thrown.") return } error(reason) @@ -150,19 +151,19 @@ open class Kommand { } /// Execute Kommand after delay - @discardableResult open func run(after delay: DispatchTimeInterval) -> Self { - executor?.run(after: delay, closure: { - self.run() + @discardableResult open func execute(after delay: DispatchTimeInterval) -> Self { + executor?.execute(after: delay, closure: { + self.execute() }) return self } /// Execute Kommand - @discardableResult open func run() -> Self { + @discardableResult open func execute() -> Self { guard state == .ready else { return self } - operation = executor?.run { + operation = executor?.execute { do { if let actionClosure = self.actionClosure { self.state = .running @@ -171,7 +172,7 @@ open class Kommand { guard self.state == .running else { return } - self.deliverer?.run { + self.deliverer?.execute { self.state = .succeeded(result) self.successClosure?(result) } @@ -180,11 +181,11 @@ open class Kommand { guard self.state == .running else { return } - self.deliverer?.run { + self.deliverer?.execute { self.state = .failed(error) if self.retryClosure?(error, self.executionCount) == true { self.state = .ready - self.run() + self.execute() } else { self.errorClosure?(error) } @@ -196,7 +197,7 @@ open class Kommand { /// Cancel Kommand after delay @discardableResult open func cancel(_ throwingError: Bool = false, after delay: DispatchTimeInterval) -> Self { - executor?.run(after: delay, closure: { + executor?.execute(after: delay, closure: { self.cancel(throwingError) }) return self @@ -207,7 +208,7 @@ open class Kommand { guard state == .ready || state == .running else { return self } - self.deliverer?.run { + self.deliverer?.execute { if throwingError { self.errorClosure?(KommandCancelledError(self)) } @@ -221,7 +222,7 @@ open class Kommand { /// Retry Kommand after delay @discardableResult open func retry(after delay: DispatchTimeInterval) -> Self { - executor?.run(after: delay, closure: { + executor?.execute(after: delay, closure: { self.retry() }) return self @@ -233,7 +234,7 @@ open class Kommand { return self } state = .ready - return run() + return execute() } } diff --git a/Source/Kommander.swift b/Source/Kommander.swift index c1f483e..4322114 100644 --- a/Source/Kommander.swift +++ b/Source/Kommander.swift @@ -44,12 +44,12 @@ open class Kommander { } /// Build Kommand instance with an actionClosure returning generic and throwing errors - open func `do`(_ actionClosure: @escaping () throws -> Result) -> Kommand { + open func make(_ actionClosure: @escaping () throws -> Result) -> Kommand { return Kommand(deliverer: deliverer, executor: executor, actionClosure: actionClosure) } /// Build [Kommand] instances collection with actionClosures returning generic and throwing errors - open func `do`(_ actionClosures: [() throws -> Result]) -> [Kommand] { + open func make(_ actionClosures: [() throws -> Result]) -> [Kommand] { var kommands = [Kommand]() for actionClosure in actionClosures { kommands.append(Kommand(deliverer: deliverer, executor: executor, actionClosure: actionClosure)) @@ -58,18 +58,18 @@ open class Kommander { } /// Execute [Kommand] instances collection concurrently or sequentially after delay - open func run(_ kommands: [Kommand], concurrent: Bool = true, waitUntilFinished: Bool = false, after delay: DispatchTimeInterval) { - executor.run(after: delay) { - self.run(kommands, concurrent: concurrent, waitUntilFinished: waitUntilFinished) + open func execute(_ kommands: [Kommand], concurrent: Bool = true, waitUntilFinished: Bool = false, after delay: DispatchTimeInterval) { + executor.execute(after: delay) { + self.execute(kommands, concurrent: concurrent, waitUntilFinished: waitUntilFinished) } } /// Execute [Kommand] instances collection concurrently or sequentially - open func run(_ kommands: [Kommand], concurrent: Bool = true, waitUntilFinished: Bool = false) { + open func execute(_ kommands: [Kommand], concurrent: Bool = true, waitUntilFinished: Bool = false) { let executionClosures = kommands.map { kommand in executionClosure(kommand) } - let operations = executor.run(executionClosures, concurrent: concurrent, waitUntilFinished: waitUntilFinished) + let operations = executor.execute(executionClosures, concurrent: concurrent, waitUntilFinished: waitUntilFinished) for (index, kommand) in kommands.enumerated() { kommand.operation = operations[index] } @@ -77,7 +77,7 @@ open class Kommander { /// Cancel [Kommand] instances collection after delay open func cancel(_ kommands: [Kommand], throwingError: Bool = false, after delay: DispatchTimeInterval) { - executor.run(after: delay) { + executor.execute(after: delay) { self.cancel(kommands, throwingError: throwingError) } } @@ -91,7 +91,7 @@ open class Kommander { /// Retry [Kommand] instances collection after delay open func retry(_ kommands: [Kommand], after delay: DispatchTimeInterval) { - executor.run(after: delay) { + executor.execute(after: delay) { self.retry(kommands) } } @@ -120,7 +120,7 @@ private extension Kommander { guard kommand.state == .running else { return } - self.deliverer.run { + self.deliverer.execute { kommand.state = .succeeded(result) kommand.successClosure?(result) } @@ -129,11 +129,11 @@ private extension Kommander { guard kommand.state == .running else { return } - self.deliverer.run { + self.deliverer.execute { kommand.state = .failed(error) if kommand.retryClosure?(error, kommand.executionCount) == true { kommand.state = .ready - kommand.run() + kommand.execute() } else { kommand.errorClosure?(error) } From beee0d1c9cdc851d83d9036f069304b37ba8e270 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Rupe=CC=81rez?= Date: Tue, 11 Sep 2018 15:36:22 +0200 Subject: [PATCH 5/5] Jazzy documentation updated. --- CHANGELOG.md | 1 - docs/Classes.html | 2 +- docs/Classes/CurrentDispatcher.html | 2 +- docs/Classes/Dispatcher.html | 62 +++++++++--------- docs/Classes/Kommand.html | 56 ++++++++-------- docs/Classes/Kommand/State.html | 36 +++++----- docs/Classes/Kommander.html | 58 ++++++++-------- docs/Classes/MainDispatcher.html | 2 +- docs/Extensions.html | 2 +- docs/Extensions/Array.html | 22 +++---- docs/Structs.html | 2 +- docs/Structs/KommandCancelledError.html | 6 +- .../Contents/Resources/Documents/Classes.html | 2 +- .../Documents/Classes/CurrentDispatcher.html | 2 +- .../Documents/Classes/Dispatcher.html | 62 +++++++++--------- .../Resources/Documents/Classes/Kommand.html | 56 ++++++++-------- .../Documents/Classes/Kommand/State.html | 36 +++++----- .../Documents/Classes/Kommander.html | 58 ++++++++-------- .../Documents/Classes/MainDispatcher.html | 2 +- .../Resources/Documents/Extensions.html | 2 +- .../Resources/Documents/Extensions/Array.html | 22 +++---- .../Contents/Resources/Documents/Structs.html | 2 +- .../Structs/KommandCancelledError.html | 6 +- .../Contents/Resources/Documents/index.html | 32 ++++----- .../Contents/Resources/Documents/search.json | 2 +- .../Contents/Resources/docSet.dsidx | Bin 28672 -> 28672 bytes docs/docsets/Kommander.tgz | Bin 59811 -> 59907 bytes docs/index.html | 32 ++++----- docs/search.json | 2 +- 29 files changed, 284 insertions(+), 285 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f56621..37894e1 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,6 @@ # Release 1.1 - [x] Set kommand error closure specifying Error type. -- [x] Modern sugar syntax. # Release 1.0.2 diff --git a/docs/Classes.html b/docs/Classes.html index 7e78c98..a420380 100644 --- a/docs/Classes.html +++ b/docs/Classes.html @@ -256,7 +256,7 @@

    Declaration

    diff --git a/docs/Classes/CurrentDispatcher.html b/docs/Classes/CurrentDispatcher.html index f2e001d..8119948 100644 --- a/docs/Classes/CurrentDispatcher.html +++ b/docs/Classes/CurrentDispatcher.html @@ -121,7 +121,7 @@

    Declaration

    diff --git a/docs/Classes/Dispatcher.html b/docs/Classes/Dispatcher.html index 015ac8b..b44a40b 100644 --- a/docs/Classes/Dispatcher.html +++ b/docs/Classes/Dispatcher.html @@ -299,9 +299,9 @@

    Declaration

  • @@ -329,9 +329,9 @@

    Declaration

  • - - - run(_:) + + + execute(_:)
    @@ -346,7 +346,7 @@

    Declaration

    Declaration

    Swift

    -
    open func run(_ operation: Operation)
    +
    open func execute(_ operation: Operation)
    @@ -359,9 +359,9 @@

    Declaration

  • @@ -376,7 +376,7 @@

    Declaration

    Declaration

    Swift

    -
    open func run(_ operations: [Operation], waitUntilFinished: Bool = false)
    +
    open func execute(_ operations: [Operation], waitUntilFinished: Bool = false)
    @@ -389,9 +389,9 @@

    Declaration

  • - - - run(_:) + + + execute(_:)
    @@ -407,7 +407,7 @@

    Declaration

    Swift

    @discardableResult
    -open func run(_ closure: @escaping () -> Void) -> Operation
    +open func execute(_ closure: @escaping () -> Void) -> Operation
  • @@ -420,9 +420,9 @@

    Declaration

  • @@ -438,7 +438,7 @@

    Declaration

    Swift

    @discardableResult
    -open func run(_ closures: [() -> Void], concurrent: Bool = true, waitUntilFinished: Bool = false) -> [Operation]
    +open func execute(_ closures: [() -> Void], concurrent: Bool = true, waitUntilFinished: Bool = false) -> [Operation]
  • @@ -451,9 +451,9 @@

    Declaration

  • @@ -468,7 +468,7 @@

    Declaration

    Declaration

    Swift

    -
    open func run(after delay: DispatchTimeInterval, closure: @escaping () -> Void)
    +
    open func execute(after delay: DispatchTimeInterval, closure: @escaping () -> Void)
    @@ -481,9 +481,9 @@

    Declaration

  • @@ -498,7 +498,7 @@

    Declaration

    Declaration

    Swift

    -
    open func run(after delay: DispatchTimeInterval, work: DispatchWorkItem)
    +
    open func execute(after delay: DispatchTimeInterval, work: DispatchWorkItem)
    @@ -511,9 +511,9 @@

    Declaration

  • - - - run(_:) + + + execute(_:)
    @@ -528,7 +528,7 @@

    Declaration

    Declaration

    Swift

    -
    open func run(_ work: DispatchWorkItem)
    +
    open func execute(_ work: DispatchWorkItem)
    @@ -543,7 +543,7 @@

    Declaration

    diff --git a/docs/Classes/Kommand.html b/docs/Classes/Kommand.html index 141b886..fc432f8 100644 --- a/docs/Classes/Kommand.html +++ b/docs/Classes/Kommand.html @@ -270,9 +270,9 @@

    Declaration

  • @@ -300,9 +300,9 @@

    Declaration

  • @@ -331,9 +331,9 @@

    Declaration

  • @@ -362,9 +362,9 @@

    Declaration

  • @@ -380,7 +380,7 @@

    Declaration

    Swift

    @discardableResult
    -open func error<Reason: Swift.Error>(_ type: Reason.Type, _ error: @escaping (_ error: Reason?) -> Void) -> Self
    +open func error<Reason: Swift.Error>(_ type: Reason.Type, _ error: @escaping (_ error: Reason) -> Void) -> Self
  • @@ -393,9 +393,9 @@

    Declaration

  • @@ -424,9 +424,9 @@

    Declaration

  • @@ -515,9 +515,9 @@

    Declaration

  • @@ -533,7 +533,7 @@

    Declaration

    Swift

    @discardableResult
    -open func run(after delay: DispatchTimeInterval) -> Self
    +open func execute(after delay: DispatchTimeInterval) -> Self
  • @@ -546,9 +546,9 @@

    Declaration

  • - - - run() + + + execute()
    @@ -564,7 +564,7 @@

    Declaration

    Swift

    @discardableResult
    -open func run() -> Self
    +open func execute() -> Self
  • @@ -577,9 +577,9 @@

    Declaration

  • @@ -608,9 +608,9 @@

    Declaration

  • @@ -639,9 +639,9 @@

    Declaration

  • @@ -703,7 +703,7 @@

    Declaration

    diff --git a/docs/Classes/Kommand/State.html b/docs/Classes/Kommand/State.html index e9c610a..0cee08d 100644 --- a/docs/Classes/Kommand/State.html +++ b/docs/Classes/Kommand/State.html @@ -89,9 +89,9 @@

    State

  • @@ -119,9 +119,9 @@

    Declaration

  • - + - ready + ready
    @@ -149,9 +149,9 @@

    Declaration

  • - + - running + running
    @@ -179,9 +179,9 @@

    Declaration

  • - - - succeeded + + + succeeded(_:)
    @@ -209,9 +209,9 @@

    Declaration

  • - - - failed + + + failed(_:)
    @@ -226,7 +226,7 @@

    Declaration

    Declaration

    Swift

    -
    case failed(Error)
    +
    case failed(Swift.Error)
    @@ -239,9 +239,9 @@

    Declaration

  • @@ -269,9 +269,9 @@

    Declaration

  • - + - ==(_:_:) + ==(_:_:)
    @@ -300,7 +300,7 @@

    Declaration

    diff --git a/docs/Classes/Kommander.html b/docs/Classes/Kommander.html index fa0a07b..1c7d110 100644 --- a/docs/Classes/Kommander.html +++ b/docs/Classes/Kommander.html @@ -299,9 +299,9 @@

    Declaration

  • @@ -329,9 +329,9 @@

    Declaration

  • @@ -359,9 +359,9 @@

    Declaration

  • - - - do(_:) + + + make(_:)
    @@ -376,7 +376,7 @@

    Declaration

    Declaration

    Swift

    -
    open func `do`<Result>(_ actionClosure: @escaping () throws -> Result) -> Kommand<Result>
    +
    open func make<Result>(_ actionClosure: @escaping () throws -> Result) -> Kommand<Result>
    @@ -389,9 +389,9 @@

    Declaration

  • - - - do(_:) + + + make(_:)
    @@ -406,7 +406,7 @@

    Declaration

    Declaration

    Swift

    -
    open func `do`<Result>(_ actionClosures: [() throws -> Result]) -> [Kommand<Result>]
    +
    open func make<Result>(_ actionClosures: [() throws -> Result]) -> [Kommand<Result>]
    @@ -419,9 +419,9 @@

    Declaration

  • @@ -436,7 +436,7 @@

    Declaration

    Declaration

    Swift

    -
    open func run<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false, after delay: DispatchTimeInterval)
    +
    open func execute<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false, after delay: DispatchTimeInterval)
    @@ -449,9 +449,9 @@

    Declaration

  • @@ -466,7 +466,7 @@

    Declaration

    Declaration

    Swift

    -
    open func run<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false)
    +
    open func execute<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false)
    @@ -479,9 +479,9 @@

    Declaration

  • @@ -509,9 +509,9 @@

    Declaration

  • @@ -539,9 +539,9 @@

    Declaration

  • @@ -569,9 +569,9 @@

    Declaration

  • @@ -601,7 +601,7 @@

    Declaration

    diff --git a/docs/Classes/MainDispatcher.html b/docs/Classes/MainDispatcher.html index af2a670..0ff7f81 100644 --- a/docs/Classes/MainDispatcher.html +++ b/docs/Classes/MainDispatcher.html @@ -121,7 +121,7 @@

    Declaration

    diff --git a/docs/Extensions.html b/docs/Extensions.html index 5171e8d..8dd3023 100644 --- a/docs/Extensions.html +++ b/docs/Extensions.html @@ -112,7 +112,7 @@

    Declaration

    diff --git a/docs/Extensions/Array.html b/docs/Extensions/Array.html index 8fd2a42..6532073 100644 --- a/docs/Extensions/Array.html +++ b/docs/Extensions/Array.html @@ -88,9 +88,9 @@

    Array

  • @@ -105,12 +105,12 @@

    Array

    Declaration

    Swift

    -
    public func run(in operationQueue: OperationQueue, waitUntilFinished: Bool = false)
    +
    public func execute(in operationQueue: OperationQueue, waitUntilFinished: Bool = false)
    @@ -118,9 +118,9 @@

    Declaration

  • @@ -135,12 +135,12 @@

    Declaration

    Declaration

    Swift

    -
    public func run(in dispatcher: Dispatcher, waitUntilFinished: Bool = false)
    +
    public func execute(in dispatcher: Dispatcher, waitUntilFinished: Bool = false)
    @@ -150,7 +150,7 @@

    Declaration

    diff --git a/docs/Structs.html b/docs/Structs.html index c1bbeb3..276a902 100644 --- a/docs/Structs.html +++ b/docs/Structs.html @@ -116,7 +116,7 @@

    Declaration

    diff --git a/docs/Structs/KommandCancelledError.html b/docs/Structs/KommandCancelledError.html index e899356..60c493f 100644 --- a/docs/Structs/KommandCancelledError.html +++ b/docs/Structs/KommandCancelledError.html @@ -119,9 +119,9 @@

    Declaration

  • @@ -158,7 +158,7 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes.html index 7e78c98..a420380 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes.html @@ -256,7 +256,7 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/CurrentDispatcher.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/CurrentDispatcher.html index f2e001d..8119948 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/CurrentDispatcher.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/CurrentDispatcher.html @@ -121,7 +121,7 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Dispatcher.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Dispatcher.html index 015ac8b..b44a40b 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Dispatcher.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Dispatcher.html @@ -299,9 +299,9 @@

    Declaration

  • @@ -329,9 +329,9 @@

    Declaration

  • - - - run(_:) + + + execute(_:)
    @@ -346,7 +346,7 @@

    Declaration

    Declaration

    Swift

    -
    open func run(_ operation: Operation)
    +
    open func execute(_ operation: Operation)
    @@ -359,9 +359,9 @@

    Declaration

  • @@ -376,7 +376,7 @@

    Declaration

    Declaration

    Swift

    -
    open func run(_ operations: [Operation], waitUntilFinished: Bool = false)
    +
    open func execute(_ operations: [Operation], waitUntilFinished: Bool = false)
    @@ -389,9 +389,9 @@

    Declaration

  • - - - run(_:) + + + execute(_:)
    @@ -407,7 +407,7 @@

    Declaration

    Swift

    @discardableResult
    -open func run(_ closure: @escaping () -> Void) -> Operation
    +open func execute(_ closure: @escaping () -> Void) -> Operation
  • @@ -420,9 +420,9 @@

    Declaration

  • @@ -438,7 +438,7 @@

    Declaration

    Swift

    @discardableResult
    -open func run(_ closures: [() -> Void], concurrent: Bool = true, waitUntilFinished: Bool = false) -> [Operation]
    +open func execute(_ closures: [() -> Void], concurrent: Bool = true, waitUntilFinished: Bool = false) -> [Operation]
  • @@ -451,9 +451,9 @@

    Declaration

  • @@ -468,7 +468,7 @@

    Declaration

    Declaration

    Swift

    -
    open func run(after delay: DispatchTimeInterval, closure: @escaping () -> Void)
    +
    open func execute(after delay: DispatchTimeInterval, closure: @escaping () -> Void)
    @@ -481,9 +481,9 @@

    Declaration

  • @@ -498,7 +498,7 @@

    Declaration

    Declaration

    Swift

    -
    open func run(after delay: DispatchTimeInterval, work: DispatchWorkItem)
    +
    open func execute(after delay: DispatchTimeInterval, work: DispatchWorkItem)
    @@ -511,9 +511,9 @@

    Declaration

  • - - - run(_:) + + + execute(_:)
    @@ -528,7 +528,7 @@

    Declaration

    Declaration

    Swift

    -
    open func run(_ work: DispatchWorkItem)
    +
    open func execute(_ work: DispatchWorkItem)
    @@ -543,7 +543,7 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand.html index 141b886..fc432f8 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand.html @@ -270,9 +270,9 @@

    Declaration

  • @@ -300,9 +300,9 @@

    Declaration

  • @@ -331,9 +331,9 @@

    Declaration

  • @@ -362,9 +362,9 @@

    Declaration

  • @@ -380,7 +380,7 @@

    Declaration

    Swift

    @discardableResult
    -open func error<Reason: Swift.Error>(_ type: Reason.Type, _ error: @escaping (_ error: Reason?) -> Void) -> Self
    +open func error<Reason: Swift.Error>(_ type: Reason.Type, _ error: @escaping (_ error: Reason) -> Void) -> Self
  • @@ -393,9 +393,9 @@

    Declaration

  • @@ -424,9 +424,9 @@

    Declaration

  • @@ -515,9 +515,9 @@

    Declaration

  • @@ -533,7 +533,7 @@

    Declaration

    Swift

    @discardableResult
    -open func run(after delay: DispatchTimeInterval) -> Self
    +open func execute(after delay: DispatchTimeInterval) -> Self
  • @@ -546,9 +546,9 @@

    Declaration

  • - - - run() + + + execute()
    @@ -564,7 +564,7 @@

    Declaration

    Swift

    @discardableResult
    -open func run() -> Self
    +open func execute() -> Self
  • @@ -577,9 +577,9 @@

    Declaration

  • @@ -608,9 +608,9 @@

    Declaration

  • @@ -639,9 +639,9 @@

    Declaration

  • @@ -703,7 +703,7 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand/State.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand/State.html index e9c610a..0cee08d 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand/State.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommand/State.html @@ -89,9 +89,9 @@

    State

  • @@ -119,9 +119,9 @@

    Declaration

  • - + - ready + ready
    @@ -149,9 +149,9 @@

    Declaration

  • - + - running + running
    @@ -179,9 +179,9 @@

    Declaration

  • - - - succeeded + + + succeeded(_:)
    @@ -209,9 +209,9 @@

    Declaration

  • - - - failed + + + failed(_:)
    @@ -226,7 +226,7 @@

    Declaration

    Declaration

    Swift

    -
    case failed(Error)
    +
    case failed(Swift.Error)
    @@ -239,9 +239,9 @@

    Declaration

  • @@ -269,9 +269,9 @@

    Declaration

  • - + - ==(_:_:) + ==(_:_:)
    @@ -300,7 +300,7 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommander.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommander.html index fa0a07b..1c7d110 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommander.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/Kommander.html @@ -299,9 +299,9 @@

    Declaration

  • @@ -329,9 +329,9 @@

    Declaration

  • @@ -359,9 +359,9 @@

    Declaration

  • - - - do(_:) + + + make(_:)
    @@ -376,7 +376,7 @@

    Declaration

    Declaration

    Swift

    -
    open func `do`<Result>(_ actionClosure: @escaping () throws -> Result) -> Kommand<Result>
    +
    open func make<Result>(_ actionClosure: @escaping () throws -> Result) -> Kommand<Result>
    @@ -389,9 +389,9 @@

    Declaration

  • - - - do(_:) + + + make(_:)
    @@ -406,7 +406,7 @@

    Declaration

    Declaration

    Swift

    -
    open func `do`<Result>(_ actionClosures: [() throws -> Result]) -> [Kommand<Result>]
    +
    open func make<Result>(_ actionClosures: [() throws -> Result]) -> [Kommand<Result>]
    @@ -419,9 +419,9 @@

    Declaration

  • @@ -436,7 +436,7 @@

    Declaration

    Declaration

    Swift

    -
    open func run<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false, after delay: DispatchTimeInterval)
    +
    open func execute<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false, after delay: DispatchTimeInterval)
    @@ -449,9 +449,9 @@

    Declaration

  • @@ -466,7 +466,7 @@

    Declaration

    Declaration

    Swift

    -
    open func run<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false)
    +
    open func execute<Result>(_ kommands: [Kommand<Result>], concurrent: Bool = true, waitUntilFinished: Bool = false)
    @@ -479,9 +479,9 @@

    Declaration

  • @@ -509,9 +509,9 @@

    Declaration

  • @@ -539,9 +539,9 @@

    Declaration

  • @@ -569,9 +569,9 @@

    Declaration

  • @@ -601,7 +601,7 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/MainDispatcher.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/MainDispatcher.html index af2a670..0ff7f81 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/MainDispatcher.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Classes/MainDispatcher.html @@ -121,7 +121,7 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions.html index 5171e8d..8dd3023 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions.html @@ -112,7 +112,7 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions/Array.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions/Array.html index 8fd2a42..6532073 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions/Array.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Extensions/Array.html @@ -88,9 +88,9 @@

    Array

  • @@ -105,12 +105,12 @@

    Array

    Declaration

    Swift

    -
    public func run(in operationQueue: OperationQueue, waitUntilFinished: Bool = false)
    +
    public func execute(in operationQueue: OperationQueue, waitUntilFinished: Bool = false)
    @@ -118,9 +118,9 @@

    Declaration

  • @@ -135,12 +135,12 @@

    Declaration

    Declaration

    Swift

    -
    public func run(in dispatcher: Dispatcher, waitUntilFinished: Bool = false)
    +
    public func execute(in dispatcher: Dispatcher, waitUntilFinished: Bool = false)
    @@ -150,7 +150,7 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs.html index c1bbeb3..276a902 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs.html @@ -116,7 +116,7 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs/KommandCancelledError.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs/KommandCancelledError.html index e899356..60c493f 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs/KommandCancelledError.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/Structs/KommandCancelledError.html @@ -119,9 +119,9 @@

    Declaration

  • @@ -158,7 +158,7 @@

    Declaration

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/index.html b/docs/docsets/Kommander.docset/Contents/Resources/Documents/index.html index ec59b09..1f9b3f0 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/index.html +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/index.html @@ -146,54 +146,54 @@

    🐒 Usage

    Making, executing, cancelling and retrying Kommands:

    -
    Kommander().do {
    +
    Kommander().make {
         // Your code here
    -}.run()
    +}.execute()
     
    -
    Kommander().do {
    +
    Kommander().make {
         // Your code here
    -}.run(after: .seconds(2))
    +}.execute(after: .seconds(2))
     
    -
    Kommander().do {
    +
    Kommander().make {
         return "Your string"
     }.success { yourString in
         print(yourString)
    -}.run()
    +}.execute()
     
    -
    Kommander().do {
    +
    Kommander().make {
         throw CocoaError(.featureUnsupported)
     }.error { error in
         print(String(describing: error!))
    -}.run()
    +}.execute()
     
    Specify Error type:
    -
    Kommander().do {
    +
    Kommander().make {
         throw MyError.error
     }.error(MyError.self) { error in
    -    // error is MyError? type.
    -}.run()
    +    // error is MyError type.
    +}.execute()
     
    Retry after cancellation:
    -
    let kommand = Kommander().do { () -> Any? in
    +
    let kommand = Kommander().make { () -> Any? in
         // Your code here
     }.success { result in
         // Your success handling here
     }.error { error in
         // Your error handling here
    -}.run()
    +}.execute()
     
     kommand.cancel()
     
     kommand.retry()
     
    Retry after failure:
    -
    let kommand = Kommander().do { () -> Any? in
    +
    let kommand = Kommander().make { () -> Any? in
         // Your code here
     }.error { error in
         // Your error handling here
     }.retry { error, executionCount in
         return executionCount < 2
    -}.run()
    +}.execute()
     

    Creating Kommanders:

    Kommander(deliverer: Dispatcher = .current, executor: Dispatcher = .default)
    @@ -257,7 +257,7 @@ 

    👮‍♂️ License

    diff --git a/docs/docsets/Kommander.docset/Contents/Resources/Documents/search.json b/docs/docsets/Kommander.docset/Contents/Resources/Documents/search.json index eaff3e4..c21ae0d 100644 --- a/docs/docsets/Kommander.docset/Contents/Resources/Documents/search.json +++ b/docs/docsets/Kommander.docset/Contents/Resources/Documents/search.json @@ -1 +1 @@ -{"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15recoveryOptionsSaySSGvp":{"name":"recoveryOptions","abstract":"

    Provides a set of possible recovery options to present to the user.

    ","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15attemptRecoverySbSi11optionIndex_tF":{"name":"attemptRecovery(optionIndex:)","abstract":"

    Attempt to recover from this error when the user selected the","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html":{"name":"KommandCancelledError","abstract":"

    Kommander cancelled error

    "},"Extensions/Array.html#/s:Sa9KommanderSo9OperationCRbzlE3runySo0B5QueueC2in_Sb17waitUntilFinishedtF":{"name":"run(in:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Array"},"Extensions/Array.html#/s:Sa9KommanderSo9OperationCRbzlE3runyAA10DispatcherC2in_Sb17waitUntilFinishedtF":{"name":"run(in:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in Dispatcher

    ","parent_name":"Array"},"Extensions/Array.html":{"name":"Array"},"Classes/MainDispatcher.html#/s:9Kommander14MainDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with main OperationQueue

    ","parent_name":"MainDispatcher"},"Classes/Kommander.html#/s:9KommanderAAC4mainABvpZ":{"name":"main","abstract":"

    Kommander instance with CurrentDispatcher deliverer and MainDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7currentABvpZ":{"name":"current","abstract":"

    Kommander instance with CurrentDispatcher deliverer and CurrentDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7defaultABvpZ":{"name":"default","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with default quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC15userInteractiveABvpZ":{"name":"userInteractive","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user interactive quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC13userInitiatedABvpZ":{"name":"userInitiated","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user initiated quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7utilityABvpZ":{"name":"utility","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with utility quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC10backgroundABvpZ":{"name":"background","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with background quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAACAbA10DispatcherC9deliverer_AD8executortcfc":{"name":"init(deliverer:executor:)","abstract":"

    Kommander instance with deliverer and executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAACAbA10DispatcherC9deliverer_SS4nameSC16QualityOfServiceO3qosSi23maxConcurrentOperationstcfc":{"name":"init(deliverer:name:qos:maxConcurrentOperations:)","abstract":"

    Kommander instance with deliverer and custom OperationQueue executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC2doAA7KommandCyxGxyKclF":{"name":"do(_:)","abstract":"

    Build Kommand instance with an actionClosure returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC2doSayAA7KommandCyxGGSayxyKcGlF":{"name":"do(_:)","abstract":"

    Build [Kommand] instances collection with actionClosures returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC3runySayAA7KommandCyxGG_Sb10concurrentSb17waitUntilFinished8Dispatch0H12TimeIntervalO5aftertlF":{"name":"run(_:concurrent:waitUntilFinished:after:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC3runySayAA7KommandCyxGG_Sb10concurrentSb17waitUntilFinishedtlF":{"name":"run(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancelySayAA7KommandCyxGG_Sb13throwingError8Dispatch0F12TimeIntervalO5aftertlF":{"name":"cancel(_:throwingError:after:)","abstract":"

    Cancel [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancelySayAA7KommandCyxGG_Sb13throwingErrortlF":{"name":"cancel(_:throwingError:)","abstract":"

    Cancel [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retryySayAA7KommandCyxGG_8Dispatch0D12TimeIntervalO5aftertlF":{"name":"retry(_:after:)","abstract":"

    Retry [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retryySayAA7KommandCyxGGlF":{"name":"retry(_:)","abstract":"

    Retry [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO13uninitializedAEyx_GAGmlF":{"name":"uninitialized","abstract":"

    Uninitialized state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO5readyAEyx_GAGmlF":{"name":"ready","abstract":"

    Ready state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO7runningAEyx_GAGmlF":{"name":"running","abstract":"

    Executing state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9succeededAEyx_GxcAGmlF":{"name":"succeeded","abstract":"

    Succeeded state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO6failedAEyx_Gs5Error_pcAGmlF":{"name":"failed","abstract":"

    Failed state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9cancelledAEyx_GAGmlF":{"name":"cancelled","abstract":"

    Cancelled state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:s9EquatableP2eeoiSbx_xtFZ":{"name":"==(_:_:)","parent_name":"State"},"Classes/Kommand/State.html":{"name":"State","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC13ActionClosurea":{"name":"ActionClosure","abstract":"

    Action closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC14SuccessClosurea":{"name":"SuccessClosure","abstract":"

    Success closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12ErrorClosurea":{"name":"ErrorClosure","abstract":"

    Error closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12RetryClosurea":{"name":"RetryClosure","abstract":"

    Retry closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5stateAC5StateOyx_Gvp":{"name":"state","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandCACyxGAA10DispatcherC9deliverer_AF8executorxyKc13actionClosuretcfc":{"name":"init(deliverer:executor:actionClosure:)","abstract":"

    Kommand instance with deliverer, executor and actionClosure returning generic and throwing errors

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7successACyxGXDyxcF":{"name":"success(_:)","abstract":"

    Specify Kommand success closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errorACyxGXDys5Error_pSgcF":{"name":"error(_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errorACyxGXDqd__m_yqd__Sgcts5ErrorRd__lF":{"name":"error(_:_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDSbs5Error_pSg_SutcF":{"name":"retry(_:)","abstract":"

    Specify Kommand retry closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDqd__m_Sbqd__Sg_Sutcts5ErrorRd__lF":{"name":"retry(_:_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6resultxSgvp":{"name":"result","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errors5Error_pSgvp":{"name":"error","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC3runACyxGXD8Dispatch0D12TimeIntervalO5after_tF":{"name":"run(after:)","abstract":"

    Execute Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC3runACyxGXDyF":{"name":"run()","abstract":"

    Execute Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancelACyxGXDSb_8Dispatch0D12TimeIntervalO5aftertF":{"name":"cancel(_:after:)","abstract":"

    Cancel Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancelACyxGXDSbF":{"name":"cancel(_:)","abstract":"

    Cancel Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXD8Dispatch0D12TimeIntervalO5after_tF":{"name":"retry(after:)","abstract":"

    Retry Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDyF":{"name":"retry()","abstract":"

    Retry Kommand

    ","parent_name":"Kommand"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC4mainACvpZ":{"name":"main","abstract":"

    Main queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7currentACvpZ":{"name":"current","abstract":"

    Current queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7defaultACvpZ":{"name":"default","abstract":"

    Dispatcher with default quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC15userInteractiveACvpZ":{"name":"userInteractive","abstract":"

    Dispatcher with user interactive quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC13userInitiatedACvpZ":{"name":"userInitiated","abstract":"

    Dispatcher with user initiated quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7utilityACvpZ":{"name":"utility","abstract":"

    Dispatcher with utility quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC10backgroundACvpZ":{"name":"background","abstract":"

    Dispatcher with background quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherCACSS4name_SC16QualityOfServiceO3qosSi23maxConcurrentOperationstcfc":{"name":"init(name:qos:maxConcurrentOperations:)","abstract":"

    Dispatcher instance with custom OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runySo9OperationCF":{"name":"run(_:)","abstract":"

    Execute Operation instance in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runySaySo9OperationCG_Sb17waitUntilFinishedtF":{"name":"run(_:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runSo9OperationCyycF":{"name":"run(_:)","abstract":"

    Execute closure in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runSaySo9OperationCGSayyycG_Sb10concurrentSb17waitUntilFinishedtF":{"name":"run(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [closure] collection in OperationQueue concurrently or sequentially

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runy8Dispatch0D12TimeIntervalO5after_yyc7closuretF":{"name":"run(after:closure:)","abstract":"

    Execute closure in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runy8Dispatch0D12TimeIntervalO5after_AE0D8WorkItemC4worktF":{"name":"run(after:work:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runy8Dispatch0D8WorkItemCF":{"name":"run(_:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue

    ","parent_name":"Dispatcher"},"Classes/CurrentDispatcher.html#/s:9Kommander17CurrentDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with current OperationQueue

    ","parent_name":"CurrentDispatcher"},"Classes/CurrentDispatcher.html":{"name":"CurrentDispatcher","abstract":"

    Current queue dispatcher

    "},"Classes/Dispatcher.html":{"name":"Dispatcher","abstract":"

    Dispatcher

    "},"Classes/Kommand.html":{"name":"Kommand","abstract":"

    Generic Kommand

    "},"Classes/Kommander.html":{"name":"Kommander","abstract":"

    Kommander manager

    "},"Classes/MainDispatcher.html":{"name":"MainDispatcher","abstract":"

    Main queue dispatcher

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file +{"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15recoveryOptionsSaySSGvp":{"name":"recoveryOptions","abstract":"

    Provides a set of possible recovery options to present to the user.

    ","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15attemptRecovery11optionIndexSbSi_tF":{"name":"attemptRecovery(optionIndex:)","abstract":"

    Attempt to recover from this error when the user selected the","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html":{"name":"KommandCancelledError","abstract":"

    Kommander cancelled error

    "},"Extensions/Array.html#/s:Sa9KommanderSo11NSOperationCRbzlE7execute2in17waitUntilFinishedySo0B5QueueC_SbtF":{"name":"execute(in:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Array"},"Extensions/Array.html#/s:Sa9KommanderSo11NSOperationCRbzlE7execute2in17waitUntilFinishedyAA10DispatcherC_SbtF":{"name":"execute(in:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in Dispatcher

    ","parent_name":"Array"},"Extensions/Array.html":{"name":"Array"},"Classes/MainDispatcher.html#/s:9Kommander14MainDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with main OperationQueue

    ","parent_name":"MainDispatcher"},"Classes/Kommander.html#/s:9KommanderAAC4mainABvpZ":{"name":"main","abstract":"

    Kommander instance with CurrentDispatcher deliverer and MainDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7currentABvpZ":{"name":"current","abstract":"

    Kommander instance with CurrentDispatcher deliverer and CurrentDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7defaultABvpZ":{"name":"default","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with default quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC15userInteractiveABvpZ":{"name":"userInteractive","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user interactive quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC13userInitiatedABvpZ":{"name":"userInitiated","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user initiated quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7utilityABvpZ":{"name":"utility","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with utility quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC10backgroundABvpZ":{"name":"background","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with background quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC9deliverer8executorAbA10DispatcherC_AFtcfc":{"name":"init(deliverer:executor:)","abstract":"

    Kommander instance with deliverer and executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC9deliverer4name3qos23maxConcurrentOperationsAbA10DispatcherC_SSSo18NSQualityOfServiceVSitcfc":{"name":"init(deliverer:name:qos:maxConcurrentOperations:)","abstract":"

    Kommander instance with deliverer and custom OperationQueue executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC4makeyAA7KommandCyxGxyKclF":{"name":"make(_:)","abstract":"

    Build Kommand instance with an actionClosure returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC4makeySayAA7KommandCyxGGSayxyKcGlF":{"name":"make(_:)","abstract":"

    Build [Kommand] instances collection with actionClosures returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7execute_10concurrent17waitUntilFinished5afterySayAA7KommandCyxGG_S2b8Dispatch0I12TimeIntervalOtlF":{"name":"execute(_:concurrent:waitUntilFinished:after:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7execute_10concurrent17waitUntilFinishedySayAA7KommandCyxGG_S2btlF":{"name":"execute(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancel_13throwingError5afterySayAA7KommandCyxGG_Sb8Dispatch0G12TimeIntervalOtlF":{"name":"cancel(_:throwingError:after:)","abstract":"

    Cancel [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancel_13throwingErrorySayAA7KommandCyxGG_SbtlF":{"name":"cancel(_:throwingError:)","abstract":"

    Cancel [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retry_5afterySayAA7KommandCyxGG_8Dispatch0E12TimeIntervalOtlF":{"name":"retry(_:after:)","abstract":"

    Retry [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retryyySayAA7KommandCyxGGlF":{"name":"retry(_:)","abstract":"

    Retry [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO13uninitializedyAEyx_GAGmlF":{"name":"uninitialized","abstract":"

    Uninitialized state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO5readyyAEyx_GAGmlF":{"name":"ready","abstract":"

    Ready state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO7runningyAEyx_GAGmlF":{"name":"running","abstract":"

    Executing state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9succeededyAEyx_GxcAGmlF":{"name":"succeeded(_:)","abstract":"

    Succeeded state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO6failedyAEyx_Gs5Error_pcAGmlF":{"name":"failed(_:)","abstract":"

    Failed state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9cancelledyAEyx_GAGmlF":{"name":"cancelled","abstract":"

    Cancelled state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"State"},"Classes/Kommand/State.html":{"name":"State","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC13ActionClosurea":{"name":"ActionClosure","abstract":"

    Action closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC14SuccessClosurea":{"name":"SuccessClosure","abstract":"

    Success closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12ErrorClosurea":{"name":"ErrorClosure","abstract":"

    Error closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12RetryClosurea":{"name":"RetryClosure","abstract":"

    Retry closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5stateAC5StateOyx_Gvp":{"name":"state","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC9deliverer8executor13actionClosureACyxGAA10DispatcherC_AIxyKctcfc":{"name":"init(deliverer:executor:actionClosure:)","abstract":"

    Kommand instance with deliverer, executor and actionClosure returning generic and throwing errors

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7successyACyxGXDyxcF":{"name":"success(_:)","abstract":"

    Specify Kommand success closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5erroryACyxGXDys5Error_pSgcF":{"name":"error(_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5erroryACyxGXDqd__m_yqd__cts5ErrorRd__lF":{"name":"error(_:_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryyACyxGXDSbs5Error_pSg_SutcF":{"name":"retry(_:)","abstract":"

    Specify Kommand retry closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryyACyxGXDqd__m_Sbqd__Sg_Sutcts5ErrorRd__lF":{"name":"retry(_:_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6resultxSgvp":{"name":"result","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errors5Error_pSgvp":{"name":"error","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7execute5afterACyxGXD8Dispatch0E12TimeIntervalO_tF":{"name":"execute(after:)","abstract":"

    Execute Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7executeACyxGXDyF":{"name":"execute()","abstract":"

    Execute Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancel_5afterACyxGXDSb_8Dispatch0E12TimeIntervalOtF":{"name":"cancel(_:after:)","abstract":"

    Cancel Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancelyACyxGXDSbF":{"name":"cancel(_:)","abstract":"

    Cancel Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retry5afterACyxGXD8Dispatch0E12TimeIntervalO_tF":{"name":"retry(after:)","abstract":"

    Retry Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDyF":{"name":"retry()","abstract":"

    Retry Kommand

    ","parent_name":"Kommand"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC4mainACvpZ":{"name":"main","abstract":"

    Main queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7currentACvpZ":{"name":"current","abstract":"

    Current queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7defaultACvpZ":{"name":"default","abstract":"

    Dispatcher with default quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC15userInteractiveACvpZ":{"name":"userInteractive","abstract":"

    Dispatcher with user interactive quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC13userInitiatedACvpZ":{"name":"userInitiated","abstract":"

    Dispatcher with user initiated quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7utilityACvpZ":{"name":"utility","abstract":"

    Dispatcher with utility quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC10backgroundACvpZ":{"name":"background","abstract":"

    Dispatcher with background quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC4name3qos23maxConcurrentOperationsACSS_So18NSQualityOfServiceVSitcfc":{"name":"init(name:qos:maxConcurrentOperations:)","abstract":"

    Dispatcher instance with custom OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executeyySo11NSOperationCF":{"name":"execute(_:)","abstract":"

    Execute Operation instance in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7execute_17waitUntilFinishedySaySo11NSOperationCG_SbtF":{"name":"execute(_:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executeySo11NSOperationCyycF":{"name":"execute(_:)","abstract":"

    Execute closure in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7execute_10concurrent17waitUntilFinishedSaySo11NSOperationCGSayyycG_S2btF":{"name":"execute(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [closure] collection in OperationQueue concurrently or sequentially

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7execute5after7closurey8Dispatch0F12TimeIntervalO_yyctF":{"name":"execute(after:closure:)","abstract":"

    Execute closure in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7execute5after4worky8Dispatch0F12TimeIntervalO_AG0F8WorkItemCtF":{"name":"execute(after:work:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executeyy8Dispatch0D8WorkItemCF":{"name":"execute(_:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue

    ","parent_name":"Dispatcher"},"Classes/CurrentDispatcher.html#/s:9Kommander17CurrentDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with current OperationQueue

    ","parent_name":"CurrentDispatcher"},"Classes/CurrentDispatcher.html":{"name":"CurrentDispatcher","abstract":"

    Current queue dispatcher

    "},"Classes/Dispatcher.html":{"name":"Dispatcher","abstract":"

    Dispatcher

    "},"Classes/Kommand.html":{"name":"Kommand","abstract":"

    Generic Kommand

    "},"Classes/Kommander.html":{"name":"Kommander","abstract":"

    Kommander manager

    "},"Classes/MainDispatcher.html":{"name":"MainDispatcher","abstract":"

    Main queue dispatcher

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file diff --git a/docs/docsets/Kommander.docset/Contents/Resources/docSet.dsidx b/docs/docsets/Kommander.docset/Contents/Resources/docSet.dsidx index d223e09ff45fa05fba0ad858855954f89d8bd67d..d2cc0616a55e40abce21aff518ae1a9369fa1848 100644 GIT binary patch literal 28672 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 IPl~qw2cq1O)c^nh literal 28672 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 diff --git a/docs/docsets/Kommander.tgz b/docs/docsets/Kommander.tgz index 9f913d1897f6bf62308793ff6daeedc1dd162a62..cc044978a0ed5ea740bc762f1d96176834e93d60 100644 GIT binary patch delta 57868 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 delta 57853 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🐒 Usage

    Making, executing, cancelling and retrying Kommands:

    -
    Kommander().do {
    +
    Kommander().make {
         // Your code here
    -}.run()
    +}.execute()
     
    -
    Kommander().do {
    +
    Kommander().make {
         // Your code here
    -}.run(after: .seconds(2))
    +}.execute(after: .seconds(2))
     
    -
    Kommander().do {
    +
    Kommander().make {
         return "Your string"
     }.success { yourString in
         print(yourString)
    -}.run()
    +}.execute()
     
    -
    Kommander().do {
    +
    Kommander().make {
         throw CocoaError(.featureUnsupported)
     }.error { error in
         print(String(describing: error!))
    -}.run()
    +}.execute()
     
    Specify Error type:
    -
    Kommander().do {
    +
    Kommander().make {
         throw MyError.error
     }.error(MyError.self) { error in
    -    // error is MyError? type.
    -}.run()
    +    // error is MyError type.
    +}.execute()
     
    Retry after cancellation:
    -
    let kommand = Kommander().do { () -> Any? in
    +
    let kommand = Kommander().make { () -> Any? in
         // Your code here
     }.success { result in
         // Your success handling here
     }.error { error in
         // Your error handling here
    -}.run()
    +}.execute()
     
     kommand.cancel()
     
     kommand.retry()
     
    Retry after failure:
    -
    let kommand = Kommander().do { () -> Any? in
    +
    let kommand = Kommander().make { () -> Any? in
         // Your code here
     }.error { error in
         // Your error handling here
     }.retry { error, executionCount in
         return executionCount < 2
    -}.run()
    +}.execute()
     

    Creating Kommanders:

    Kommander(deliverer: Dispatcher = .current, executor: Dispatcher = .default)
    @@ -257,7 +257,7 @@ 

    👮‍♂️ License

    diff --git a/docs/search.json b/docs/search.json index eaff3e4..c21ae0d 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -{"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15recoveryOptionsSaySSGvp":{"name":"recoveryOptions","abstract":"

    Provides a set of possible recovery options to present to the user.

    ","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15attemptRecoverySbSi11optionIndex_tF":{"name":"attemptRecovery(optionIndex:)","abstract":"

    Attempt to recover from this error when the user selected the","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html":{"name":"KommandCancelledError","abstract":"

    Kommander cancelled error

    "},"Extensions/Array.html#/s:Sa9KommanderSo9OperationCRbzlE3runySo0B5QueueC2in_Sb17waitUntilFinishedtF":{"name":"run(in:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Array"},"Extensions/Array.html#/s:Sa9KommanderSo9OperationCRbzlE3runyAA10DispatcherC2in_Sb17waitUntilFinishedtF":{"name":"run(in:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in Dispatcher

    ","parent_name":"Array"},"Extensions/Array.html":{"name":"Array"},"Classes/MainDispatcher.html#/s:9Kommander14MainDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with main OperationQueue

    ","parent_name":"MainDispatcher"},"Classes/Kommander.html#/s:9KommanderAAC4mainABvpZ":{"name":"main","abstract":"

    Kommander instance with CurrentDispatcher deliverer and MainDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7currentABvpZ":{"name":"current","abstract":"

    Kommander instance with CurrentDispatcher deliverer and CurrentDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7defaultABvpZ":{"name":"default","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with default quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC15userInteractiveABvpZ":{"name":"userInteractive","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user interactive quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC13userInitiatedABvpZ":{"name":"userInitiated","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user initiated quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7utilityABvpZ":{"name":"utility","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with utility quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC10backgroundABvpZ":{"name":"background","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with background quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAACAbA10DispatcherC9deliverer_AD8executortcfc":{"name":"init(deliverer:executor:)","abstract":"

    Kommander instance with deliverer and executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAACAbA10DispatcherC9deliverer_SS4nameSC16QualityOfServiceO3qosSi23maxConcurrentOperationstcfc":{"name":"init(deliverer:name:qos:maxConcurrentOperations:)","abstract":"

    Kommander instance with deliverer and custom OperationQueue executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC2doAA7KommandCyxGxyKclF":{"name":"do(_:)","abstract":"

    Build Kommand instance with an actionClosure returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC2doSayAA7KommandCyxGGSayxyKcGlF":{"name":"do(_:)","abstract":"

    Build [Kommand] instances collection with actionClosures returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC3runySayAA7KommandCyxGG_Sb10concurrentSb17waitUntilFinished8Dispatch0H12TimeIntervalO5aftertlF":{"name":"run(_:concurrent:waitUntilFinished:after:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC3runySayAA7KommandCyxGG_Sb10concurrentSb17waitUntilFinishedtlF":{"name":"run(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancelySayAA7KommandCyxGG_Sb13throwingError8Dispatch0F12TimeIntervalO5aftertlF":{"name":"cancel(_:throwingError:after:)","abstract":"

    Cancel [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancelySayAA7KommandCyxGG_Sb13throwingErrortlF":{"name":"cancel(_:throwingError:)","abstract":"

    Cancel [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retryySayAA7KommandCyxGG_8Dispatch0D12TimeIntervalO5aftertlF":{"name":"retry(_:after:)","abstract":"

    Retry [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retryySayAA7KommandCyxGGlF":{"name":"retry(_:)","abstract":"

    Retry [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO13uninitializedAEyx_GAGmlF":{"name":"uninitialized","abstract":"

    Uninitialized state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO5readyAEyx_GAGmlF":{"name":"ready","abstract":"

    Ready state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO7runningAEyx_GAGmlF":{"name":"running","abstract":"

    Executing state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9succeededAEyx_GxcAGmlF":{"name":"succeeded","abstract":"

    Succeeded state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO6failedAEyx_Gs5Error_pcAGmlF":{"name":"failed","abstract":"

    Failed state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9cancelledAEyx_GAGmlF":{"name":"cancelled","abstract":"

    Cancelled state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:s9EquatableP2eeoiSbx_xtFZ":{"name":"==(_:_:)","parent_name":"State"},"Classes/Kommand/State.html":{"name":"State","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC13ActionClosurea":{"name":"ActionClosure","abstract":"

    Action closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC14SuccessClosurea":{"name":"SuccessClosure","abstract":"

    Success closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12ErrorClosurea":{"name":"ErrorClosure","abstract":"

    Error closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12RetryClosurea":{"name":"RetryClosure","abstract":"

    Retry closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5stateAC5StateOyx_Gvp":{"name":"state","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandCACyxGAA10DispatcherC9deliverer_AF8executorxyKc13actionClosuretcfc":{"name":"init(deliverer:executor:actionClosure:)","abstract":"

    Kommand instance with deliverer, executor and actionClosure returning generic and throwing errors

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7successACyxGXDyxcF":{"name":"success(_:)","abstract":"

    Specify Kommand success closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errorACyxGXDys5Error_pSgcF":{"name":"error(_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errorACyxGXDqd__m_yqd__Sgcts5ErrorRd__lF":{"name":"error(_:_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDSbs5Error_pSg_SutcF":{"name":"retry(_:)","abstract":"

    Specify Kommand retry closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDqd__m_Sbqd__Sg_Sutcts5ErrorRd__lF":{"name":"retry(_:_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6resultxSgvp":{"name":"result","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errors5Error_pSgvp":{"name":"error","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC3runACyxGXD8Dispatch0D12TimeIntervalO5after_tF":{"name":"run(after:)","abstract":"

    Execute Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC3runACyxGXDyF":{"name":"run()","abstract":"

    Execute Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancelACyxGXDSb_8Dispatch0D12TimeIntervalO5aftertF":{"name":"cancel(_:after:)","abstract":"

    Cancel Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancelACyxGXDSbF":{"name":"cancel(_:)","abstract":"

    Cancel Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXD8Dispatch0D12TimeIntervalO5after_tF":{"name":"retry(after:)","abstract":"

    Retry Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDyF":{"name":"retry()","abstract":"

    Retry Kommand

    ","parent_name":"Kommand"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC4mainACvpZ":{"name":"main","abstract":"

    Main queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7currentACvpZ":{"name":"current","abstract":"

    Current queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7defaultACvpZ":{"name":"default","abstract":"

    Dispatcher with default quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC15userInteractiveACvpZ":{"name":"userInteractive","abstract":"

    Dispatcher with user interactive quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC13userInitiatedACvpZ":{"name":"userInitiated","abstract":"

    Dispatcher with user initiated quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7utilityACvpZ":{"name":"utility","abstract":"

    Dispatcher with utility quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC10backgroundACvpZ":{"name":"background","abstract":"

    Dispatcher with background quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherCACSS4name_SC16QualityOfServiceO3qosSi23maxConcurrentOperationstcfc":{"name":"init(name:qos:maxConcurrentOperations:)","abstract":"

    Dispatcher instance with custom OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runySo9OperationCF":{"name":"run(_:)","abstract":"

    Execute Operation instance in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runySaySo9OperationCG_Sb17waitUntilFinishedtF":{"name":"run(_:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runSo9OperationCyycF":{"name":"run(_:)","abstract":"

    Execute closure in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runSaySo9OperationCGSayyycG_Sb10concurrentSb17waitUntilFinishedtF":{"name":"run(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [closure] collection in OperationQueue concurrently or sequentially

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runy8Dispatch0D12TimeIntervalO5after_yyc7closuretF":{"name":"run(after:closure:)","abstract":"

    Execute closure in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runy8Dispatch0D12TimeIntervalO5after_AE0D8WorkItemC4worktF":{"name":"run(after:work:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC3runy8Dispatch0D8WorkItemCF":{"name":"run(_:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue

    ","parent_name":"Dispatcher"},"Classes/CurrentDispatcher.html#/s:9Kommander17CurrentDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with current OperationQueue

    ","parent_name":"CurrentDispatcher"},"Classes/CurrentDispatcher.html":{"name":"CurrentDispatcher","abstract":"

    Current queue dispatcher

    "},"Classes/Dispatcher.html":{"name":"Dispatcher","abstract":"

    Dispatcher

    "},"Classes/Kommand.html":{"name":"Kommand","abstract":"

    Generic Kommand

    "},"Classes/Kommander.html":{"name":"Kommander","abstract":"

    Kommander manager

    "},"Classes/MainDispatcher.html":{"name":"MainDispatcher","abstract":"

    Main queue dispatcher

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file +{"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15recoveryOptionsSaySSGvp":{"name":"recoveryOptions","abstract":"

    Provides a set of possible recovery options to present to the user.

    ","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html#/s:9Kommander21KommandCancelledErrorV15attemptRecovery11optionIndexSbSi_tF":{"name":"attemptRecovery(optionIndex:)","abstract":"

    Attempt to recover from this error when the user selected the","parent_name":"KommandCancelledError"},"Structs/KommandCancelledError.html":{"name":"KommandCancelledError","abstract":"

    Kommander cancelled error

    "},"Extensions/Array.html#/s:Sa9KommanderSo11NSOperationCRbzlE7execute2in17waitUntilFinishedySo0B5QueueC_SbtF":{"name":"execute(in:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Array"},"Extensions/Array.html#/s:Sa9KommanderSo11NSOperationCRbzlE7execute2in17waitUntilFinishedyAA10DispatcherC_SbtF":{"name":"execute(in:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in Dispatcher

    ","parent_name":"Array"},"Extensions/Array.html":{"name":"Array"},"Classes/MainDispatcher.html#/s:9Kommander14MainDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with main OperationQueue

    ","parent_name":"MainDispatcher"},"Classes/Kommander.html#/s:9KommanderAAC4mainABvpZ":{"name":"main","abstract":"

    Kommander instance with CurrentDispatcher deliverer and MainDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7currentABvpZ":{"name":"current","abstract":"

    Kommander instance with CurrentDispatcher deliverer and CurrentDispatcher executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7defaultABvpZ":{"name":"default","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with default quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC15userInteractiveABvpZ":{"name":"userInteractive","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user interactive quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC13userInitiatedABvpZ":{"name":"userInitiated","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with user initiated quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7utilityABvpZ":{"name":"utility","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with utility quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC10backgroundABvpZ":{"name":"background","abstract":"

    Kommander instance with CurrentDispatcher deliverer and Dispatcher executor with background quality of service

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC9deliverer8executorAbA10DispatcherC_AFtcfc":{"name":"init(deliverer:executor:)","abstract":"

    Kommander instance with deliverer and executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC9deliverer4name3qos23maxConcurrentOperationsAbA10DispatcherC_SSSo18NSQualityOfServiceVSitcfc":{"name":"init(deliverer:name:qos:maxConcurrentOperations:)","abstract":"

    Kommander instance with deliverer and custom OperationQueue executor

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC4makeyAA7KommandCyxGxyKclF":{"name":"make(_:)","abstract":"

    Build Kommand instance with an actionClosure returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC4makeySayAA7KommandCyxGGSayxyKcGlF":{"name":"make(_:)","abstract":"

    Build [Kommand] instances collection with actionClosures returning generic and throwing errors

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7execute_10concurrent17waitUntilFinished5afterySayAA7KommandCyxGG_S2b8Dispatch0I12TimeIntervalOtlF":{"name":"execute(_:concurrent:waitUntilFinished:after:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC7execute_10concurrent17waitUntilFinishedySayAA7KommandCyxGG_S2btlF":{"name":"execute(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [Kommand] instances collection concurrently or sequentially

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancel_13throwingError5afterySayAA7KommandCyxGG_Sb8Dispatch0G12TimeIntervalOtlF":{"name":"cancel(_:throwingError:after:)","abstract":"

    Cancel [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC6cancel_13throwingErrorySayAA7KommandCyxGG_SbtlF":{"name":"cancel(_:throwingError:)","abstract":"

    Cancel [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retry_5afterySayAA7KommandCyxGG_8Dispatch0E12TimeIntervalOtlF":{"name":"retry(_:after:)","abstract":"

    Retry [Kommand] instances collection after delay

    ","parent_name":"Kommander"},"Classes/Kommander.html#/s:9KommanderAAC5retryyySayAA7KommandCyxGGlF":{"name":"retry(_:)","abstract":"

    Retry [Kommand] instances collection

    ","parent_name":"Kommander"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO13uninitializedyAEyx_GAGmlF":{"name":"uninitialized","abstract":"

    Uninitialized state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO5readyyAEyx_GAGmlF":{"name":"ready","abstract":"

    Ready state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO7runningyAEyx_GAGmlF":{"name":"running","abstract":"

    Executing state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9succeededyAEyx_GxcAGmlF":{"name":"succeeded(_:)","abstract":"

    Succeeded state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO6failedyAEyx_Gs5Error_pcAGmlF":{"name":"failed(_:)","abstract":"

    Failed state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:9Kommander7KommandC5StateO9cancelledyAEyx_GAGmlF":{"name":"cancelled","abstract":"

    Cancelled state

    ","parent_name":"State"},"Classes/Kommand/State.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"State"},"Classes/Kommand/State.html":{"name":"State","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC13ActionClosurea":{"name":"ActionClosure","abstract":"

    Action closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC14SuccessClosurea":{"name":"SuccessClosure","abstract":"

    Success closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12ErrorClosurea":{"name":"ErrorClosure","abstract":"

    Error closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC12RetryClosurea":{"name":"RetryClosure","abstract":"

    Retry closure type

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5stateAC5StateOyx_Gvp":{"name":"state","abstract":"

    Kommand state

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC9deliverer8executor13actionClosureACyxGAA10DispatcherC_AIxyKctcfc":{"name":"init(deliverer:executor:actionClosure:)","abstract":"

    Kommand instance with deliverer, executor and actionClosure returning generic and throwing errors

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7successyACyxGXDyxcF":{"name":"success(_:)","abstract":"

    Specify Kommand success closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5erroryACyxGXDys5Error_pSgcF":{"name":"error(_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5erroryACyxGXDqd__m_yqd__cts5ErrorRd__lF":{"name":"error(_:_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryyACyxGXDSbs5Error_pSg_SutcF":{"name":"retry(_:)","abstract":"

    Specify Kommand retry closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryyACyxGXDqd__m_Sbqd__Sg_Sutcts5ErrorRd__lF":{"name":"retry(_:_:)","abstract":"

    Specify Kommand error closure

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6resultxSgvp":{"name":"result","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5errors5Error_pSgvp":{"name":"error","abstract":"

    Undocumented

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7execute5afterACyxGXD8Dispatch0E12TimeIntervalO_tF":{"name":"execute(after:)","abstract":"

    Execute Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC7executeACyxGXDyF":{"name":"execute()","abstract":"

    Execute Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancel_5afterACyxGXDSb_8Dispatch0E12TimeIntervalOtF":{"name":"cancel(_:after:)","abstract":"

    Cancel Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC6cancelyACyxGXDSbF":{"name":"cancel(_:)","abstract":"

    Cancel Kommand

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retry5afterACyxGXD8Dispatch0E12TimeIntervalO_tF":{"name":"retry(after:)","abstract":"

    Retry Kommand after delay

    ","parent_name":"Kommand"},"Classes/Kommand.html#/s:9Kommander7KommandC5retryACyxGXDyF":{"name":"retry()","abstract":"

    Retry Kommand

    ","parent_name":"Kommand"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC4mainACvpZ":{"name":"main","abstract":"

    Main queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7currentACvpZ":{"name":"current","abstract":"

    Current queue dispatcher

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7defaultACvpZ":{"name":"default","abstract":"

    Dispatcher with default quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC15userInteractiveACvpZ":{"name":"userInteractive","abstract":"

    Dispatcher with user interactive quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC13userInitiatedACvpZ":{"name":"userInitiated","abstract":"

    Dispatcher with user initiated quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7utilityACvpZ":{"name":"utility","abstract":"

    Dispatcher with utility quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC10backgroundACvpZ":{"name":"background","abstract":"

    Dispatcher with background quality of service

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC4name3qos23maxConcurrentOperationsACSS_So18NSQualityOfServiceVSitcfc":{"name":"init(name:qos:maxConcurrentOperations:)","abstract":"

    Dispatcher instance with custom OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executeyySo11NSOperationCF":{"name":"execute(_:)","abstract":"

    Execute Operation instance in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7execute_17waitUntilFinishedySaySo11NSOperationCG_SbtF":{"name":"execute(_:waitUntilFinished:)","abstract":"

    Execute [Operation] instance collection in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executeySo11NSOperationCyycF":{"name":"execute(_:)","abstract":"

    Execute closure in OperationQueue

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7execute_10concurrent17waitUntilFinishedSaySo11NSOperationCGSayyycG_S2btF":{"name":"execute(_:concurrent:waitUntilFinished:)","abstract":"

    Execute [closure] collection in OperationQueue concurrently or sequentially

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7execute5after7closurey8Dispatch0F12TimeIntervalO_yyctF":{"name":"execute(after:closure:)","abstract":"

    Execute closure in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7execute5after4worky8Dispatch0F12TimeIntervalO_AG0F8WorkItemCtF":{"name":"execute(after:work:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue after delay

    ","parent_name":"Dispatcher"},"Classes/Dispatcher.html#/s:9Kommander10DispatcherC7executeyy8Dispatch0D8WorkItemCF":{"name":"execute(_:)","abstract":"

    Execute DispatchWorkItem instance in DispatchQueue

    ","parent_name":"Dispatcher"},"Classes/CurrentDispatcher.html#/s:9Kommander17CurrentDispatcherCACycfc":{"name":"init()","abstract":"

    Dispatcher instance with current OperationQueue

    ","parent_name":"CurrentDispatcher"},"Classes/CurrentDispatcher.html":{"name":"CurrentDispatcher","abstract":"

    Current queue dispatcher

    "},"Classes/Dispatcher.html":{"name":"Dispatcher","abstract":"

    Dispatcher

    "},"Classes/Kommand.html":{"name":"Kommand","abstract":"

    Generic Kommand

    "},"Classes/Kommander.html":{"name":"Kommander","abstract":"

    Kommander manager

    "},"Classes/MainDispatcher.html":{"name":"MainDispatcher","abstract":"

    Main queue dispatcher

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Extensions.html":{"name":"Extensions","abstract":"

    The following extensions are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file