在 Observable 数组中搜索一个值

Search a value in Array of Observable

我在 Rxswift 中有 Bool Observables 数组。

let rxBoolObservableArray: [Observable<Bool>] = [Observable<Bool>]()

现在,如果有任何元素为假,如何获取?

func containsFalse(array: [Observable<Bool>]) -> Observable<Bool> {
    return Observable.combineLatest(array) { [=10=].contains(false) }
}

combineLatest 函数将订阅数组中的所有可观察对象。

每次其中一个可观察对象更新其值时,上述内容也会更新数组,因此输出始终是正确的。接受的答案不会那样做(它只适用于 Observable.just 函数并且是不正确的。)

这是基于@DanielT 回答的 allSatisfy 扩展。它可能适合您的问题:

extension Array where Iterator.Element: ObservableType {

    func allSatisfy(_ predicate: @escaping (Iterator.Element.E) throws -> Bool) -> Observable<Bool> {
        return Observable.combineLatest(self) { try [=10=].allSatisfy(predicate) }
    }
}

用法示例:

rxBoolObservableArray
    .allSatisfy { [=11=] } // { [=11=] == true }
    .subscribe(onNext: { areTestsPassing in
        print(areTestsPassing)
    })
    .disposed(by: disposeBag)