使用" ViewState"在RxSwift / MVVM中

时间:2018-06-04 00:49:26

标签: swift mvvm rx-swift

这个问题非常广泛,但我不确定应该关注哪个方面。我的目标是抽象出我的屏幕的重复模式,例如错误,加载,空数据。代表这些状态的视图在我拥有的许多屏幕之间不会有太大变化。也许他们可以参数化以允许这种灵活性(例如showError(message: "404"))。

我喜欢this article作为封装可重用UI方面的方法。

但它似乎在必要的背景下工作。所以我有一个API调用,我可以showError,我可以hideError在响应中。多数民众赞成。

现在我使用RxSwift / MVVM方法,每个屏幕都绑定到输入和输出。我喜欢通过使用" View State"来简化我的屏幕所知道的状态。概念。

正如您在此片段中所看到的,我可以减少视图呈现的单个Observable的大量逻辑。

let getFoos: (String) -> Observable<FooViewStateState> = { query in
            fooService.perform(query)
                .map { results in
                    if results.isEmpty {
                        return ViewState.noResults(query: query)
                    } else {
                        return ViewState.matches(query: query, results: results.map { $0.name })
                    }
                }
                .startWith(ViewState.searching(query))
        }

问题是通过使用枚举ViewState,我现在还不清楚如何使用之前的命令式API&#34; showLoading / hideLoading ... showError / hideError等...&#34 ;当我打开这个枚举的情况时。如果ViewState Observable发出.loading我必须隐藏错误屏幕,隐藏空屏幕等。

0 个答案:

没有答案