Observable<Observable<T>> 到 Observable<T> rxswift

Posted

技术标签:

【中文标题】Observable<Observable<T>> 到 Observable<T> rxswift【英文标题】:Observable<Observable<T>> to Observable<T> rxswift 【发布时间】:2021-07-23 10:17:11 【问题描述】:

您好,我很难弄清楚这一点。 还有一些其他问题。

谁能帮我把Observable&lt;[Observable&lt;CellModel&gt;]变成Observable&lt;[CellModel]&gt;?

request(categoryId: $0) 的结果是 Observable&lt;[Observable&lt;CellModel&gt;?]&gt;

enter image description here

  selectCategory
        .do(onNext:  _ in output.cells.onNext([.init(cellID: kSkeletonTableID)]) )
        .flatMap  [unowned self] in request(categoryId: $0) 
       // .showIndicator()
        .trackError(errorTracker)
        .compactMap 
            var cellModel:[CellModel] = $0.flatMap  $0 
            return cellModel
        
        .bind(to: output.cells)
        .disposed(by: disposeBag)

【问题讨论】:

【参考方案1】:

这是你从request(categoryId:) 返回的一个相当受折磨的类型。真正的解决办法就在那里。然而,这个问题的答案是:

selectCategory
    .do(onNext:  _ in output.cells.onNext([.init(cellID: kSkeletonTableID)]) )
    .flatMap  request(categoryId: $0).flatMap  Observable.combineLatest($0.compactMap  $0 )  
    // .showIndicator()
    .trackError(errorTracker)
    .bind(to: output.cells)
    .disposed(by: disposeBag)

您可能需要根据预期输出考虑 flatMap 的其他变体之一。详情见这篇文章:RxSwift's Many Faces of FlatMap

【讨论】:

非常感谢您的回答!我知道返回值 Observable]> 不是最好的选择!关于这一点,你能回答我现在上传的另一个问题吗? ***.com/questions/68525265/…

以上是关于Observable<Observable<T>> 到 Observable<T> rxswift的主要内容,如果未能解决你的问题,请参考以下文章

类型 'Observable<Object>' 不可分配给类型 'Observable<IUser[]>'

Observable<> 不可分配给类型 Observable<SomeType[]>

类型 'Observable<any>' 不可分配给类型 'Observable<T>'

如何组合多个 Observable 类型数组 Observable<T[]>?

类型 '() => Observable<any>' 不可分配给类型 '() => Observable<any>'

在 RxSwift 中将 [Observable<T>] 转换为 Observable<[T]>