我是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)
对我来说似乎就像阿雷()没有做什么,我不知道为什么。另一方面,这段代码完成了我想要的。我想知道为什么以前的代码不能以相同的方式工作:
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)
}
国家/地区有一个属于'城市'的房产,是一系列城市。
@solidcell你必须是正确的,如果我在toArray()之前和之后放置debug()我得到2个订阅,每个debug()一个,每个数组项只有1个下一个事件,仅用于before toArray()调试()。
但是,为什么不完成呢?
答案 0 :(得分:0)
这可能是因为某些国家的country!.cities
没有终止。在toArray()
完成之前,Observable
不会发出任何元素。只有Observable
完成后才会将所有元素打包为一个元素Array
。但是,我不能确定这是否是您的问题,因为我不知道您是如何实施的country!.cities
。
尝试在其中放置一个.debug()
,看看是否可以发现是否是因为Observable of cities尚未完成。