Updates `flatMapFirst` and adds it to `Driver` unit.

This commit is contained in:
Krunoslav Zaher 2015-12-05 00:44:44 +01:00
parent ebf146ca41
commit fa69e11a3c
3 changed files with 68 additions and 4 deletions

View File

@ -84,6 +84,25 @@ extension DriverConvertibleType {
}
}
extension DriverConvertibleType {
/**
Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence.
If element is received while there is some projected observable sequence being merged it will simply be ignored.
- parameter selector: A transform function to apply to element that was observed while no observable is executing in parallel.
- returns: An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence that was received while no other sequence was being calculated.
*/
@warn_unused_result(message="http://git.io/rxs.uo")
public func flatMapFirst<R>(selector: (E) -> Driver<R>)
-> Driver<R> {
let source: Observable<R> = self
.asObservable()
.flatMapFirst(selector)
return Driver<R>(source)
}
}
extension DriverConvertibleType {
/**

View File

@ -206,10 +206,11 @@ extension ObservableType {
extension ObservableType {
/**
Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence.
- parameter selector: A transform function to apply to each element.
- returns: An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence.
Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence.
If element is received while there is some projected observable sequence being merged it will simply be ignored.
- parameter selector: A transform function to apply to element that was observed while no observable is executing in parallel.
- returns: An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence that was received while no other sequence was being calculated.
*/
@warn_unused_result(message="http://git.io/rxs.uo")
public func flatMapFirst<O: ObservableConvertibleType>(selector: (E) throws -> O)

View File

@ -278,6 +278,50 @@ extension DriverTest {
}
}
// MARK: flatMapFirst
extension DriverTest {
func testAsDriver_flatMapFirst() {
let hotObservable = BackgroundThreadPrimitiveHotObservable<Int>()
let hotObservable1 = MainThreadPrimitiveHotObservable<Int>()
let hotObservable2 = MainThreadPrimitiveHotObservable<Int>()
let errorHotObservable = MainThreadPrimitiveHotObservable<Int>()
let drivers: [Driver<Int>] = [
hotObservable1.asDriver(onErrorJustReturn: -2),
hotObservable2.asDriver(onErrorJustReturn: -3),
errorHotObservable.asDriver(onErrorJustReturn: -4),
]
let driver = hotObservable.asDriver(onErrorJustReturn: 2).flatMapFirst { drivers[$0] }
let results = subscribeTwiceOnBackgroundSchedulerAndOnlyOneSubscription(driver) {
XCTAssertTrue(hotObservable.subscriptions == [SubscribedToHotObservable])
hotObservable.on(.Next(0))
hotObservable.on(.Next(1))
hotObservable1.on(.Next(1))
hotObservable1.on(.Next(2))
hotObservable1.on(.Error(testError))
hotObservable2.on(.Next(10))
hotObservable2.on(.Next(11))
hotObservable2.on(.Error(testError))
hotObservable.on(.Error(testError))
errorHotObservable.on(.Completed)
hotObservable.on(.Completed)
XCTAssertTrue(hotObservable.subscriptions == [UnsunscribedFromHotObservable])
}
XCTAssertEqual(results, [
1, 2, -2,
])
}
}
// MARK: doOn
extension DriverTest {
func testAsDriver_doOn() {