我是 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)
}
Country 有一个属性“城市”,它是一组城市。
@solidcell 你一定是对的,如果我在 toArray() 之前和之后放置 debug(),我会得到 2 个订阅,每个 debug() 一个,每个数组项的 1 个 next 事件仅用于之前的 toArray() debug()。
但是,为什么它没有完成呢?