Updates `flatMapFirst` and adds it to `Driver` unit.
This commit is contained in:
parent
ebf146ca41
commit
fa69e11a3c
|
|
@ -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 {
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue