swift - 将模型与裸 RxSwift 和 BehaviourSubject 同步

标签 swift synchronization reactive-programming rx-swift

我是 swift 和 rxSwfit 世界的新手,我正在寻求对当前解决方案的建议或批评,例如同步博客文章、类别、作者或我们需要的任何内容。

以这种经典情况为例:一个可观察量向每个订阅者提供模型中存在的最后更新的数据,从那一刻起,对于模型的每次同步,它都会发出新的整组数据,因此订阅者得到并对更新后的数据进行操作。

我构建了一个可观察对象,其下一个值是其当前值(内存中存在的数据)与从其余值获取的值的组合。

以帖子为例:

let articoli2       = BehaviorSubject<[Articolo]>(value: [Articolo]()) // ram data, initially empty
var articoli_rest   = PublishSubject<[Articolo]>()  // net data
var idx_articoli2   = [Int:Articolo]()   // used for filtering duplicates 

然后我创建更新“articoli2”的订阅

Observable.zip(articoli2, articoli_rest) { (ram_articoli, rest_articoli) -> [Articolo] in
            var new_articoli = ram_articoli

//Code that merges the data currently present (ram_articoli) 
//with the data grabbed from the net (rest_articoli)
...     
            return new_articoli
            }.subscribe(onNext: { (articoli) in
                self.articoli2.onNext(articoli)

            }).disposed(by: disposeBag)

最后,当我想更新模型时,我使用:

func sync_articoli()
{
        get_rest_array(Articolo.self,"https://rest_route").retry(4)
            .subscribe(onNext: { (articoli) in
                    self.articoli_rest.onNext(articoli)
}

该函数订阅 get_rest_array 返回的单个可观察值 当来自网络的数据准备好时,它会在 articoli_rest 上发出一个项目 这反过来又更新了我的 articoli2。 整个事情有效,但我不确定它是否真的有用,而且我对我的解决方案没有信心。有什么话吗? (想骂多少就骂多少)

最佳答案

Observable.zip() 是用于分页的错误运算符。有一个scan operator为此目的而设计。

关于swift - 将模型与裸 RxSwift 和 BehaviourSubject 同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47697673/

相关文章:

ios - 从 Parse 服务器获取数据到 xcode

swift - 根据屏幕尺寸调整 3D 立方体的大小

java - "More produced than requested"使用 `replay` 和 `autoConnect` 时出现异常

swift - 默认值太复杂,无法使用基本的 '+' 运算符进行编译

swift - http加载失败后做点什么

android - 处理断开的网络连接的最佳策略?

java - 类的静态方法之间的同步

python - 使用 boto3 将本地文件夹同步到 s3 存储桶

ios - 为什么 View Controller 的 deinit 不使用 RXSwift 调用?

java - 如何将阻塞代码变成响应式代码?