Router.swift 880 B

12345678910111213141516171819202122232425262728293031323334353637
  1. import Combine
  2. import SwiftUI
  3. import Swinject
  4. protocol Router {
  5. var selectTab: PassthroughSubject<Int, Never> { get }
  6. var modalScreen: CurrentValueSubject<Screen?, Never> { get }
  7. var tabs: [Screen] { get }
  8. func view(for screen: Screen) -> AnyView
  9. }
  10. final class BaseRouter: Router {
  11. let selectTab = PassthroughSubject<Int, Never>()
  12. let modalScreen = CurrentValueSubject<Screen?, Never>(nil)
  13. private let resolver: Resolver
  14. let tabs: [Screen] = [
  15. .home,
  16. .settings
  17. ]
  18. private var screens: [Screen.ID: AnyView] = [:]
  19. init(resolver: Resolver) {
  20. self.resolver = resolver
  21. }
  22. func view(for screen: Screen) -> AnyView {
  23. if let view = screens[screen.id] {
  24. return view
  25. }
  26. screens[screen.id] = screen.view(resolver: resolver).asAny()
  27. return screens[screen.id]!
  28. }
  29. }