Router.swift 802 B

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