我有一个简单的结构Foo
:
struct Foo {
let bar: String
}
现在,我创建ReplaySubject
的无限制Foo
:
let subject = ReplaySubject<Foo>.createUnbounded()
我现在如何理解(未终止的)流是否有一个Foo
等于bar
的{{1}}? (这可以是第1个,第3个或第20个元素。)
答案 0 :(得分:1)
首先,这有点疯狂。使用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 }
}
}