Во-первых, это своего рода сумасшедший запрос.Вы не должны думать о том, что было, работая с Rx.Скорее вы должны думать о том, что всегда происходит.Вы должны думать об инвариантах ...
Тем не менее, оператор ниже выдаст индексы для вас.Поскольку субъект способен постоянно излучать события, оператор рассчитан на работу в режиме реального времени.Его можно использовать так:
let indexes = subject.indexOfElementSatisfying { $0.bar == "abc" }
Вот оно:
extension ObservableConvertibleType {
/**
Emits the index of all the values in the stream that satisfy the predicate.
- parameter pred: The predicate that determines whether the value satisfies the condition
- returns: An observable sequence of indexes to those elements.
*/
func indexOfElementSatisfying(_ pred: @escaping (E) throws -> Bool) -> Observable<Int> {
return asObservable()
.enumerated()
.filter { try pred($0.element) }
.map { $0.index }
}
}