BaseViewModel.swift 881 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. import Combine
  2. import SwiftUI
  3. import Swinject
  4. protocol ViewModel {
  5. func subscribe()
  6. func view(for screen: Screen) -> AnyView
  7. func showModal(for screen: Screen?)
  8. func hideModal()
  9. }
  10. class BaseViewModel<Provider>: ViewModel, Injectable where Provider: FreeAPS.Provider {
  11. let resolver: Resolver
  12. let provider: Provider
  13. var lifetime = Set<AnyCancellable>()
  14. @Injected() var router: Router!
  15. required init(provider: Provider, resolver: Resolver) {
  16. self.provider = provider
  17. self.resolver = resolver
  18. injectServices(resolver)
  19. subscribe()
  20. }
  21. func subscribe() {}
  22. func view(for screen: Screen) -> AnyView {
  23. router.view(for: screen)
  24. }
  25. func showModal(for screen: Screen?) {
  26. router.mainModalScreen.send(screen)
  27. }
  28. func hideModal() {
  29. router.mainModalScreen.send(nil)
  30. }
  31. }