From fff115b2db96156d00cc1ba102010857fc6d3a49 Mon Sep 17 00:00:00 2001 From: Ivan Smolin Date: Wed, 28 Dec 2016 15:10:47 +0300 Subject: [PATCH] add docs and refactor a little bit --- .../Sequence/Sequence+ConcurrentMap.swift | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/LeadKit/LeadKit/Extensions/Sequence/Sequence+ConcurrentMap.swift b/LeadKit/LeadKit/Extensions/Sequence/Sequence+ConcurrentMap.swift index 0b388517..4c13495b 100644 --- a/LeadKit/LeadKit/Extensions/Sequence/Sequence+ConcurrentMap.swift +++ b/LeadKit/LeadKit/Extensions/Sequence/Sequence+ConcurrentMap.swift @@ -8,13 +8,22 @@ import RxSwift -public typealias CancelClosureType = () -> () +public typealias ConcurrentMapCancelClosure = () -> () public extension Sequence { + /// Method which asynchronous transforms sequence using given transform closure + /// and given number of concurrent operations + /// + /// - Parameters: + /// - transform: Transform closure + /// - concurrentOperationCount: Number of concurrent operations + /// - completion: Completion handler with results of transform + /// - Returns: Closure whitch can be called to cancel asynchronous operation + @discardableResult func concurrentMap(transform: @escaping ((Iterator.Element) throws -> R), concurrentOperationCount: Int = ProcessInfo.processInfo.activeProcessorCount, - completion: @escaping (([R]) -> ())) -> CancelClosureType { + completion: @escaping (([R]) -> ())) -> ConcurrentMapCancelClosure { let operationsCount = Swift.max(1, concurrentOperationCount) @@ -56,8 +65,14 @@ public extension Sequence { public extension Sequence { - func concurrentRxMap(transform: @escaping ((Iterator.Element) throws -> R), - concurrentOperationCount: Int = ProcessInfo.processInfo.activeProcessorCount) -> Observable<[R]> { + /// Reactive version of concurrentMap(transform:concurrentOperationCount:completion:) + /// + /// - Parameters: + /// - concurrentOperationCount: Number of concurrent operations + /// - transform: Transform closure + /// - Returns: Observable of transform return type + func concurrentRxMap(concurrentOperationCount: Int = ProcessInfo.processInfo.activeProcessorCount, + transform: @escaping ((Iterator.Element) throws -> R)) -> Observable<[R]> { return Observable<[R]>.create { observer in let disposeHandler = self.concurrentMap(transform: transform, @@ -69,17 +84,5 @@ public extension Sequence { return Disposables.create(with: disposeHandler) } } - - func concurrentRxMap(transform: @escaping ((Iterator.Element) throws -> R)) -> Observable<[R]> { - - return Observable<[R]>.create { observer in - let disposeHandler = self.concurrentMap(transform: transform) { - observer.onNext($0) - observer.onCompleted() - } - - return Disposables.create(with: disposeHandler) - } - } }