BaseStateModel.swift 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import SwiftUI
  2. import Swinject
  3. protocol StateModel: ObservableObject {
  4. var resolver: Resolver? { get set }
  5. var isInitial: Bool { get set }
  6. func subscribe()
  7. func showModal(for screen: Screen?)
  8. func hideModal()
  9. func view(for screen: Screen) -> AnyView
  10. }
  11. class BaseStateModel<Provider>: StateModel, Injectable where Provider: FreeAPS.Provider {
  12. @Injected() var router: Router!
  13. var isInitial: Bool = true
  14. private(set) var provider: Provider!
  15. var resolver: Resolver? {
  16. didSet {
  17. if let resolver = resolver {
  18. injectServices(resolver)
  19. provider = Provider(resolver: resolver)
  20. subscribe()
  21. }
  22. }
  23. }
  24. var lifetime = Lifetime()
  25. func subscribe() {}
  26. func showModal(for screen: Screen?) {
  27. router.mainModalScreen.send(screen)
  28. }
  29. func hideModal() {
  30. router.mainModalScreen.send(nil)
  31. }
  32. func view(for screen: Screen) -> AnyView {
  33. router.view(for: screen)
  34. }
  35. }