Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class ViewModel {
- private var isSelectedBehaviorRelay = BehaviorRelay<Bool>(value: false)
- lazy var isSelectedObservable: Observable<Bool> = {
- isSelectedBehaviorRelay.asObservable()
- }()
- init(_ isSelected: Bool) {
- isSelectedBehaviorRelay.accept(isSelected)
- }
- }
- class SomeOtherViewModel {
- private var viewModelsBehaviorRelay = BehaviorRelay<[ViewModel]>(value: [
- ViewModel(true),
- ViewModel(false),
- ViewModel(true),
- ViewModel(false),
- ViewModel(true)
- ])
- private let disposeBag = DisposeBag()
- lazy var filteredViewModelsObservable: Observable<[ViewModel]> = {
- viewModelsBehaviorRelay
- .flatMapLatest { viewModels in
- Observable.from(viewModels)
- .flatMapLatest { viewModel in
- viewModel.isSelectedObservable
- .take(1)
- .filter { $0 }
- .map { _ in viewModel } // If true, map event to viewModel that owns the property
- }
- .toArray()
- }
- }()
- }
- let viewModel = SomeOtherViewModel()
- viewModel.filteredViewModelsObservable.debug().subscribe(onNext: {
- print($0)
- // The ViewModel objects whos isSelectedObservable property are true
- }).disposed(by: disposeBag)
Add Comment
Please, Sign In to add comment