RxSwift中的乐观UI更新

RxSwift中的乐观UI更新,swift,mvvm,rx-swift,Swift,Mvvm,Rx Swift,我有一个视图模型,可以对TODO数组进行一些更新。我正在将一组输入映射到操作(在枚举中建模为案例),并将它们合并到单个 let mergedActions=Observable.merge([ todosFromService.map{.fromService(todos:$0)}, toggleFavoriteSubject.map{.toggleFavorite(标识符:$0)}, toggleIsReadSubject.map{.toggleIsRead(标识符:$0)} ]) 然后我使

我有一个视图模型,可以对TODO数组进行一些更新。我正在将一组输入映射到操作(在枚举中建模为案例),并将它们合并到单个

let mergedActions=Observable.merge([
todosFromService.map{.fromService(todos:$0)},
toggleFavoriteSubject.map{.toggleFavorite(标识符:$0)},
toggleIsReadSubject.map{.toggleIsRead(标识符:$0)}
])
然后我使用
scan
来“记住”更新的历史记录

todos=mergedActions
.scan([]){(lastTodos,new)->[Todo]中的
换新{
case.fromService(让todos):
返回待办事项
case.toggleFavorite(let标识符):
返回lastTodos.withFavoritedToggled(atId:标识符)
case.toggleIsRead(let标识符):
返回lastTodos.withIsReadToggled(atId:标识符)
}
}
我的问题是将网络请求集成到这种方法中。例如,我有一个“乐观更新”,在这里我假设成功并更新内存中的todo。但我还想在服务器上更新它,然后 如果请求失败,“回滚”更新

根据我观察到的当前结构,我想不出如何做到这一点。例如,
扫描
闭包不再是可观察的,因为它只返回一个
[Todo]
,所以我不能用
平面图
或任何东西发出api请求


如果远程更新失败,如何对其进行修改或扩充以支持api集成并回滚相应的本地更新?

我建议像此框架那样聚合状态- 它还严重依赖.scan()运算符,因此您会发现这种方法很熟悉。 您可以使用它,也可以自己实现类似的解决方案