gpt4 book ai didi

ios - 如何使用 RxSwift 将一种类型的 Observable 数组转换为不同类型的 Observable 数组

转载 作者:行者123 更新时间:2023-11-30 13:24:08 28 4
gpt4 key购买 nike

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

提前致谢。

编辑:

View 模型实现如下:

class LocationViewModel {

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

}

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

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

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

最佳答案

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

尝试在其中放入 .debug() 并查看是否可以发现是否是因为城市的 Observable 未完成。

关于ios - 如何使用 RxSwift 将一种类型的 Observable 数组转换为不同类型的 Observable 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37421537/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com