BaseModuleBuilder.swift 696 B

123456789101112131415161718192021222324252627
  1. import SwiftUI
  2. import Swinject
  3. protocol ModuleBuilder {
  4. associatedtype View: SwiftUI.View
  5. func buildView() -> AnyView
  6. }
  7. class BaseModuleBuilder<View: BaseView, ViewModel: ObservableObject, Provider: FreeAPS.Provider>: ModuleBuilder
  8. where ViewModel: BaseViewModel<Provider>, View.ViewModel == ViewModel
  9. {
  10. let resolver: Resolver
  11. lazy var viewModel: ViewModel = { buildViewModel() }()
  12. init(resolver: Resolver) {
  13. self.resolver = resolver
  14. }
  15. func buildViewModel() -> ViewModel {
  16. ViewModel(provider: Provider(resolver: resolver), resolver: resolver)
  17. }
  18. func buildView() -> AnyView {
  19. View().environmentObject(viewModel).asAny()
  20. }
  21. }