Como podría asignar 2 viewModels en una vista.. usando protocolos?

protocolos
view-models

#1

como podría usar 2 viewModels en una vista?.. si ambos viewModel van (digamos) hablar el mismo idioma, pero harán dos cosas diferentes? se que es una pregunta un poco mas amplia de lo que parece, pero como todos me gustan los retos, la cosa es que estoy usando coordinadores, y a ese coordinador quiero decirle: “mira tengo este viewModel que conforma este protocolo, manda a ese controlador este tipo de viewModel” para hacer su chamba… me doy una idea, pero me falta algo en el rompecabezas, y pues me hice bolas jeje, les paso lo que tengo para ver si me pueden ayudar… en código tengo esto…

1- estoy usando coordinadores.
coordinador…

         class MyClaseCoordinator: Coordinator { 
             var: coordinator: [Coordinator] = []
             var nav: UINavigationController
        
             init(nav: UINavigationController) {
               self.nav = nav
          } 

        func toMyClass(struct: struct) {
             let viewModel = MyClassViewModel(struct: struct)
             let vc = myClass(viewModel: viewModel) 
            nav.pushViewController(vc, animated: true)
       }
   }

y desde la clase para llamar a ese controlador simplemente llamo la función usando mi coordinador
pasándole los datos de mu struct

 coordinator.toMyClass(struct: struct)

y me manda a la vista… todo bien aqui, ya que le estoy enviando desde el coordinador que existe un viewModel… y se inicializa correctamente…

2- ahora este es mi protocolo…

    protocol myClassViewModelDelegate: class { 
          var title: String { get }
          var name: String { get }
          var bindingCheck: Bindable<Bool> { get set }
          var type: { get }

         func save()
 }

2- este es mi ViewModel…

  class myClassViewModel: myClassViewModelDelegate {
        private var struct: Struct
        var title: String {
        return struct.title
        }
        var name: String { 
           return struct.name
       }
       var bindingCheck: Bindable<Bool> = Bindable<Bool>()
       var type: { 
           return struct.type
       }
         init(struct: Strutc) {
         self.strutc = struct
      }
      func save() {
          // TODO
      }
     // other funcs
}

my otro viewModel seria exactamente igual pero hará obviamente cosas diferentes en sus funciones… y para no estar que enviando que si es este viewModel has esto y lo otro… la idea fue implementar ese protocolo para pasar las variables al viewModel, implementándole el protocolo a cada uno… mi pregunta es como le mando al coordinador el tipo de viewModel usando esos protocolos, en una sola función? por que bien podría crear otra función y crear ese otro viewModel… y solucionar ese problema, aun que tendría que modificar tanto la clase que controla ese viewModel como el coordinador y hacer otros ajustes… pero se que me puedo ahorrar esa función que al final hará lo mismo y se puede refactorizar en una función,… me imagine usando genéricos para enviar los viewModels… esa seria otra solución, y también pues tendría que hacer ajustes… la que tengo curiosidad es… uno de mis compañeros me dijo que intentara inicializar el protocolo o algo asi… que eso solucionarīa el problema… solamente que no se como podría hacerlo de esa manera o amenos ambos tendemos dudas al respecto… como le digo a la clase, desde el protocolo que le voy a enviar el modelView que necesito o como le digo a la clase que le mando el viewModel que contiene ese protocolo? y bueno espero no hacerlos bolas… y gracias por adelantado, saludos a todos!