Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.22 KB | None | 0 0
  1. class GlobalHook {
  2.  
  3. static let shared = GlobalHook()
  4.  
  5. var updateModel = PublishRelay<Model>()
  6. }
  7.  
  8. protcol ViewModelProcotol {
  9. func hook()
  10. }
  11.  
  12. struct repository {
  13. let store: ActionRelay<[Article]>
  14.  
  15. func fetch() -> Observable<[Article]> {
  16. appService.request.map { $0.articles }.do(onNext: { [weak store] store?.accept($0) })
  17. }
  18.  
  19. func more() -> Observable<[Article]> {
  20. appService.request.map { $0.articles }.do(onNext: { [weak store] in
  21. var items = store?.value ?? []
  22. items.append($0)
  23. store.accept(items)
  24. })
  25. }
  26.  
  27. func itemsState() -> observable<[Article]> {
  28. return store.asObservable()
  29. }
  30.  
  31. }
  32.  
  33. class ViewModel: ViewModelProtocol {
  34.  
  35. let refresh = PublishRelay<Void>()
  36. let more = PublishRelay<Void>()
  37.  
  38. var output: Observable<ViewState>()
  39.  
  40. private let converter = Converter()
  41.  
  42. let worker = CustomWorker()
  43.  
  44. init() {
  45. output = worker.itemsState().asObservable()
  46. refresh.flatMap { worker.fetch() }
  47. more.flatMap { worker.more() }
  48.  
  49. hook()
  50. }
  51.  
  52. func hook() {
  53. GlobalHook.shared.updateModel.bind(to: store).disposed(by: disposeBag)
  54. }
  55. }
  56.  
  57. struct Worker {
  58.  
  59. func loadModel() -> Observable<Model> { .... }
  60. }
  61.  
  62. struct Converter {
  63.  
  64. func viewState(_ model: Model) -> ViewState { ... }
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement