Bienvenue dans MVVM-Router avec SwiftUI et Combine | par Martin Lukacs | Meilleure programmation | Octobre 2020

Online Coding Courses for Kids

Coordinateur de routage centralisé

Si vous avez déjà travaillé un peu avec SwiftUI, vous devez avoir remarqué très tôt que les vues sont très étroitement liées les unes aux autres. NavigationLinks ou feuilles appellent généralement la vue suivante dans le flux de navigation par nom. Cela rend les futurs changements de navigation très compliqués à gérer (en particulier dans un environnement de navigation d’application complexe). Mon approche a été d’essayer de centraliser le routage en un seul endroit qui peut être partagé ou transmis à n’importe quel viewModel.

Comme vous pouvez le voir dans le code ci-dessus, le mainRouter est basé sur des protocoles qui aident à découpler les vues. Cela peut être fait en définissant un routeur dans le modèle de vue et en l’appelant si nécessaire dans la vue, comme illustré dans les deux exemples suivants.

Et voila, votre point de vue est inconscient de ce que représente “routeToLaunches ()” ou “routeToRockets ()”.

Cela fonctionne également avec le routage qui nécessite le partage de données comme vous pouvez le voir avec la route vers «DetailLaunchView».

Source unique de vérité pour les données

Cette fonctionnalité est facilement implémentée avec la combinaison de l’injection de dépendances, de l’utilisation d’un référentiel spécifique pour la gestion des données et de la combinaison.

Ce n’est pas nouveau mais ça marche bien.

Comme pour les protocoles de routage, nous tirons parti de la puissance des protocoles pour réduire le couplage. Le référentiel peut être transmis par injection de dépendances à n’importe quelle partie de l’application. Abonnez-vous simplement aux éditeurs déclarés dans le protocole et vous aurez accès au flux de données le plus récent et le plus récent.

Les exemples valent mille mots:

  1. Déclarez votre référentiel de partage de données
  2. Injecter le composant
  3. Abonnez-vous et attribuez ou utilisez les données envoyées. Fonctionne très bien en combinaison avec la variable @Published.
  4. Vous pouvez ensuite appliquer les transformations souhaitées aux données
  5. Appliquez ces modifications sur les données locales à votre guise.

Dans l’ensemble, il est facile de mettre en œuvre ces types de techniques avec SwiftUI et Combine et une sorte de DI. Si vous vous sentez paresseux, il existe une pléthore de bibliothèques d’injection de dépendances qui devraient vous aider (Resolve, SwiftInject, etc.).

La facilité de traitement des données

Pour terminer, je voulais revenir rapidement sur la belle symbiose qui existe déjà entre SwiftUI et Combine.

Pour cela, vous allez simplement vous concentrer sur la mise en œuvre d’une barre de recherche et de filtrage très simple.

Ci-dessus, une vue en grille simple affichant les lancements de l’espace X.

  1. Liaison entre view et viewModel. Dans ce cas, le contenu TextField et la variable de requête viewModel.
  2. Liaison entre la vue et le filtre viewModel.
  3. Lier les données affichées de Gridview au viewModel se lance.

Voyons ensuite comment traiter les données entrantes dans viewModel.

La magie se produit dans la variable filteredLaunchesPublisher. Combinez, éliminez, traitez et attribuez. En très peu de lignes de code, nous avons une recherche et un filtre entièrement fonctionnels sur nos données.

  1. @ Variables publiées facilitant la liaison des données entre viewModel et la vue.
  2. Création d’un éditeur pour le traitement des données. Dans ce cas, il s’agit de la combinaison de notre courant principal de vérité: lancements, requête et filtre appliqué.
  3. Affectez l’éditeur de traitement à une variable limitée locale pour afficher les données à jour.

Close Menu