Guest User

Untitled

a guest
Feb 17th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. class ViewModel {
  2. private var isSelectedBehaviorRelay = BehaviorRelay<Bool>(value: false)
  3.  
  4. lazy var isSelectedObservable: Observable<Bool> = {
  5. isSelectedBehaviorRelay.asObservable()
  6. }()
  7.  
  8. init(_ isSelected: Bool) {
  9. isSelectedBehaviorRelay.accept(isSelected)
  10. }
  11. }
  12.  
  13. class SomeOtherViewModel {
  14. private var viewModelsBehaviorRelay = BehaviorRelay<[ViewModel]>(value: [
  15. ViewModel(true),
  16. ViewModel(false),
  17. ViewModel(true),
  18. ViewModel(false),
  19. ViewModel(true)
  20. ])
  21. private let disposeBag = DisposeBag()
  22.  
  23. lazy var filteredViewModelsObservable: Observable<[ViewModel]> = {
  24. viewModelsBehaviorRelay
  25. .flatMapLatest { viewModels in
  26. Observable.from(viewModels)
  27. .flatMapLatest { viewModel in
  28. viewModel.isSelectedObservable
  29. .take(1)
  30. .filter { $0 }
  31. .map { _ in viewModel } // If true, map event to viewModel that owns the property
  32. }
  33. .toArray()
  34. }
  35. }()
  36. }
  37.  
  38. let viewModel = SomeOtherViewModel()
  39. viewModel.filteredViewModelsObservable.debug().subscribe(onNext: {
  40. print($0)
  41. // The ViewModel objects whos isSelectedObservable property are true
  42. }).disposed(by: disposeBag)
Add Comment
Please, Sign In to add comment