Router.swift 679 B

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