在 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)
我在 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)