Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class GlobalHook {
- static let shared = GlobalHook()
- var updateModel = PublishRelay<Model>()
- }
- protcol ViewModelProcotol {
- func hook()
- }
- struct repository {
- let store: ActionRelay<[Article]>
- func fetch() -> Observable<[Article]> {
- appService.request.map { $0.articles }.do(onNext: { [weak store] store?.accept($0) })
- }
- func more() -> Observable<[Article]> {
- appService.request.map { $0.articles }.do(onNext: { [weak store] in
- var items = store?.value ?? []
- items.append($0)
- store.accept(items)
- })
- }
- func itemsState() -> observable<[Article]> {
- return store.asObservable()
- }
- }
- class ViewModel: ViewModelProtocol {
- let refresh = PublishRelay<Void>()
- let more = PublishRelay<Void>()
- var output: Observable<ViewState>()
- private let converter = Converter()
- let worker = CustomWorker()
- init() {
- output = worker.itemsState().asObservable()
- refresh.flatMap { worker.fetch() }
- more.flatMap { worker.more() }
- hook()
- }
- func hook() {
- GlobalHook.shared.updateModel.bind(to: store).disposed(by: disposeBag)
- }
- }
- struct Worker {
- func loadModel() -> Observable<Model> { .... }
- }
- struct Converter {
- func viewState(_ model: Model) -> ViewState { ... }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement