Skip to content

Instantly share code, notes, and snippets.

@muizidn
Created February 5, 2018 06:09
Show Gist options
  • Save muizidn/d46c4e800fc498a054e8b7d9fa39165d to your computer and use it in GitHub Desktop.
Save muizidn/d46c4e800fc498a054e8b7d9fa39165d to your computer and use it in GitHub Desktop.
Usage of withLatestFrom in RxSwift to tackle cyclic Observable sequence
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