如何使用 RxSwift 将一种类型的 Observable 数组转换为另一种类型的 Observable 数组

How to convert Observable array of a type to Observable array of a different type with RxSwift

我是 RxSwift 的新手,我遇到了下一个情况:

self.viewModel!.country
        .flatMapLatest { country -> Observable<City> in
            country!.cities!.toObservable()
        }
        .map { city -> SectionModel<String, String> in
            SectionModel(model: city.name!, items: city.locations!)
        }
        .toArray()
        .bindTo(self.tableView.rx_itemsWithDataSource(dataSource))
        .addDisposableTo(self.disposeBag)

在我看来 toArray() 什么都不做,我不知道为什么。另一方面,这段代码做我想做的。我想知道为什么以前的代码不能以同样的方式工作:

self.viewModel!.country
        .flatMapLatest { country -> Observable<[SectionModel<String, String>]> in
            var models = [SectionModel<String, String>]()
            for city in country!.cities! {
                models.append(SectionModel(model: city.name!, items: city.locations!))
            }
            return Observable.just(models)
        }
        .bindTo(self.tableView.rx_itemsWithDataSource(dataSource))
        .addDisposableTo(self.disposeBag)

提前致谢。

编辑:

视图模型实现如下:

class LocationViewModel {

    let country = BehaviorSubject<Country?>(value: nil)

}

国家/地区有一个 属性 'cities',它是一个城市数组。

@solidcell 你一定是对的,如果我在 toArray() 之前和之后放置 debug(),我会得到 2 个订阅,每个 debug() 一个,每个数组项的 1 个下一个事件仅在 toArray( ) 调试().

但是,为什么它没有完成?

可能是因为 country!.cities 某些国家/地区没有终止。在 Observable 完成之前,toArray() 不会发出任何元素。只有在 Observable 完成后,它才会将所有元素打包为一个元素作为 Array。但是,我不能确定这是否是您的问题,因为我不知道您是如何实施 country!.cities.

尝试在其中放置一个 .debug(),看看您是否可以发现这是不是因为城市的 Observable 未完成。