Этот вопрос очень широкий, но я не уверен, на каком аспекте я должен сосредоточиться.У меня есть цель абстрагироваться от повторяющихся шаблонов моих экранов, таких как ошибки, загрузка, пустые данные.Представления, которые представляют эти состояния, не будут сильно меняться между многими экранами, которые у меня есть.Возможно, они могут быть параметризованы для обеспечения такой гибкости (например, showError(message: "404")
).
Мне понравилась эта статья как метод инкапсуляции аспектов этого интерфейса, которые можно использовать повторно.
Но, похоже, это работает в императивном контексте.Итак, у меня есть вызов API, и я могу showError
, а в ответе я могу hideError
.Все отлично.
Теперь я использую подход RxSwift / MVVM, где каждый экран привязывается к входам и выходам.И я хотел бы упростить состояние, о котором мой экран знает, используя концепцию «Просмотр состояния».
Как вы можете видеть в этом фрагменте, я могу уменьшить много логики для одной наблюдаемой, которую отображает представление.
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))
}
Проблема в том, что при использовании enum ViewState
егоТеперь мне непонятно, как использовать императивный API до "showLoading / hideLoading ... showError / hideError и т. д.", когда я включаю случаи этого перечисления.Если ViewState Observable испустит .loading
, мне придется скрыть экран ошибок, скрыть пустой экран и т. Д.