Прежде всего, обратите внимание, что переменная устарела в RxCocoa (используйте вместо нее BehaviorRelay).
Краткое решение состоит в том, чтобы объединить isSelected
наблюдаемые в одну наблюдаемую эмиссию количества. Я просто бросил этот фрагмент вместе, но он должен указать вам правильное направление.
invoices
// whenever the list changes, subscribe to the combined observable (and dispose of any previous subscriptions)
.flatMapLatest { list in
// merge all isSelected observables together
return Observable.merge(list.map { $0.isSelected })
}
// when an element is emitted, that means some `isSelected` observable has changed its value
// get the latest invoices array
.withLatestFrom(invoices)
// convert it from a InvoiceDataModel array to a summed amount of all elements
.map { $0.reduce(0) { $0 + $1.amount } }
// log all events passing through
.debug()
.subscribe()
.disposed(by: yourDisposeBag)
Вы можете использовать аналогичный подход для подписки на Observable, который генерируется, если выбраны все элементы. (Не забудьте о .distinctUntilChanged()
, иначе вы увидите много испускаемых элементов.)