No deberías Es un error común pensar que SwiftUI funciona mejor con MVVM.
MVVM no tiene lugar en SwfitUI. Estás preguntando si puedes empujar un rectángulo para
encajar en forma de triángulo. No encajaría.
Comencemos con algunos hechos y trabajemos paso a paso:
ViewModel es un modelo en MVVM.
MVVM no tiene en cuenta el tipo de valor (p. Ej., No existe tal cosa en Java).
Un modelo de tipo de valor (modelo sin estado) se considera más seguro que la referencia
modelo de tipo (modelo con estado) en el sentido de inmutabilidad.
Ahora, MVVM requiere que configure un modelo de tal manera que siempre que cambie,
Actualiza la vista de alguna manera predeterminada. Esto se conoce como vinculante.
Sin vinculación, no tendrá una buena separación de preocupaciones, por ejemplo; refactorizando
modelo y estados asociados y mantenerlos separados de la vista.
Estas son las dos cosas que la mayoría de los desarrolladores MVVM de iOS fallan:
iOS no tiene un mecanismo "vinculante" en el sentido tradicional de Java.
Algunos simplemente ignorarían el enlace y pensarían en llamar a un objeto ViewModel
resuelve todo de forma automática; algunos introducirían Rx basado en KVO, y
complica todo cuando se supone que MVVM simplifica las cosas.
modelo con estado es demasiado peligroso
porque MVVM puso demasiado énfasis en ViewModel, muy poco en la gestión del estado
y disciplinas generales en la gestión del control; la mayoría de los desarrolladores terminan
pensar que un modelo con estado que se usa para actualizar la vista es reutilizable y
comprobable .
esta es la razón por la cual Swift introduce el tipo de valor en primer lugar; un modelo sin
estado.
Ahora a su pregunta: ¿pregunta si su ViewModel puede tener acceso a EnvironmentObject (EO)?
No deberías Porque en SwiftUI un modelo que se ajusta a Ver automáticamente tiene
referencia a EO. P.ej;
struct Model: View {
@EnvironmentObject state: State
// automatic binding in body
var body: some View {...}
}
Espero que la gente pueda apreciar cómo está diseñado el SDK compacto.
En SwiftUI, MVVM es automático . No hay necesidad de un objeto ViewModel separado
que se une manualmente a la vista que requiere que se le pase una referencia EO.
El código anterior es MVVM. P.ej; Un modelo con unión para ver.
Pero debido a que el modelo es un tipo de valor, en lugar de refactorizar el modelo y el estado como
Ver modelo, refactoriza el control (en la extensión de protocolo, por ejemplo).
Este es el SDK oficial que adapta el patrón de diseño a la función de idioma, en lugar de solo
haciendo cumplir Sustancia sobre la forma.
Mira tu solución, tienes que usar singleton que es básicamente global. usted
debe saber lo peligroso que es acceder a cualquier lugar global sin protección de
inmutabilidad, que no tiene porque tiene que usar el modelo de tipo de referencia.
TL; DR
No haces MVVM de manera Java en SwiftUI. Y la forma rápida de hacerlo no es necesario
para hacerlo, ya está incorporado.
Espero que más desarrolladores vean esto, ya que esto parecía una pregunta popular.