Created
February 5, 2018 06:09
-
-
Save muizidn/d46c4e800fc498a054e8b7d9fa39165d to your computer and use it in GitHub Desktop.
Usage of withLatestFrom in RxSwift to tackle cyclic Observable sequence
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let user: PublishSubject<User>() | |
let cart = user.startWith( ... ) // I provide a starter value for sequence | |
.flatMapLatest { user -> Observable<Cart> in | |
return Observable.just(user.cart) | |
} | |
.map { | |
... // Do some logic here | |
} | |
// Updating user for other observer | |
Observable.combineLatest(cart, user.asObservable()) // This combine latest cause cyclic sequence | |
.flatMapLatest { (args:(cart: Cart, user: User)) -> Observable<User> in | |
let _user = args.user | |
_user.cart = args.cart | |
return Observable.just(_user) | |
} | |
.bind(to: user.asObserver) | |
. //DISPOSE | |
// Solution | |
cart.withLatestFrom(user) { (w_cart, w_user) -> (Cart, User) in // Yohoo, no more driving from User | |
return (w_cart, w_user) | |
} | |
.flatMapLatest { (args:(cart: Cart, user: User)) -> Observable<User> in | |
let _user = args.user | |
_user.cart = args.cart | |
return Observable.just(_user) | |
} | |
.bind(to: user.asObserver) | |
. //DISPOSE | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment