在可观测阵列搜索的值

问题描述 投票:0回答:2

我有在Rxswift布尔观测量的阵列。

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

现在,如何获得如果任何元素是假的?

swift rx-swift rx-cocoa
2个回答
1
投票

这是基于@DanielT答案allSatisfy扩展。这可能是适合你的问题:

extension Array where Iterator.Element: ObservableType {

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

用法示例:

rxBoolObservableArray
    .allSatisfy { $0 } // { $0 == true }
    .subscribe(onNext: { areTestsPassing in
        print(areTestsPassing)
    })
    .disposed(by: disposeBag) 

2
投票
func containsFalse(array: [Observable<Bool>]) -> Observable<Bool> {
    return Observable.combineLatest(array) { $0.contains(false) }
}

combineLatest功能将订阅阵列中的所有观测。

上述规定也将每一次观测的一个更新其值,使输出将始终是正确的更新数组。接受的答案没有做到这一点(它仅适用于该Observable.just功能和不正确。)

© www.soinside.com 2019 - 2024. All rights reserved.