Partage
  • Partager sur Facebook
  • Partager sur Twitter

Variable commune a tout les viewController

    3 octobre 2019 à 15:31:54

    Bonjour, 

    Je suis novice en programmation ios (programmation tout court à vrai dire), et je sollicite votre aide pour un problème auquel je suis confronté.

    Dans le cadre de mes études, je suis en train de développer une application, qui reprend un peu le concept d'un Quizz, (l'utilisateur entend un son et doit dire ce qu'il a entendu, parmis les 2/3/4 propositions affichées). 

    Le fonctionnement est le suivant, l'application est divisée en 16 séances, de 20 questions chacune. Pour l'instant, chaque question est reliée a un seul viewController, et donc, la première séance comporte 20 viewController.

    Dans un premier temps, je voudrai savoir si il était préférable pour moi de compiler toutes mes questions sur un seul viewController ? ( je précise que si j'ai fait 1VC/question, c'est uniquement dans une logique d'organisation, afin de ne pas me perdre avec 1 seul VC et 10000 lignes de code)

    Dans un second temps, je souhaiterai créer une variable correspondant au score /20, commune a tout les viewController de la séance 1.

    exemple : l'user a juste à la première question, la variable score prend le chiffre 1, et "score+1" a chaque fois qu'il répond juste à une question. À la fin de la séance, je souhaite que le score/20 soit affiché.

    D'où le but de mon post, est-il possible de créer simplement, une variable "score" commune a tout mes VC de la séance ?

    Un gros merci d'avance, à toute les personnes qui prendront le temps de me répondre.

    Cordialement. 

    • Partager sur Facebook
    • Partager sur Twitter
      3 octobre 2019 à 16:06:04

      Salut,

      Je vais enfoncer une porte ouverte mais 16 série de 20 questions ça fait 320 ViewController. C'est impossible à maintenir. Si tu veux faire une modification sur l'UI il te faudra toucher 320 la même chose. J'en ai des frissons rien que d'y penser.

      De plus, tu as peur de te perdre avec 1 ViewController et 10 000 lignes de code mais c'est justement en ayant 320 ViewController que tu vas dupliquer ton code et que ton nombre de ligne va augmenter de manière linéaire.

      Donc clairement, je n'aurais fait qu'un ViewController. Après c'est une affaire d'organisation. Regarde le Design Pattern MVP (ou VIPER mais ça peut être un peu hardcore pour commencer). Tu as ton ViewController qui a son Presenter. Le Presenter va donner le son au ViewController et assigner les 2/3/4 propositions de réponses. Ton Presenter appelle ton Model pour récupérer les données. En appelant une méthode next() par exemple. Avec de l'injection de dépendances (pas obligatoire du tout ! J'aime bien c'est tout) ça peut être très simple. 1 ViewController / 1 Presenter / 1 Service / 1 Repo (à voir si ça s'adapte vraiment à ton app, c'est qu'un exemple. On pourrait en avoir 16). A un moment donné il faut juste donné l'identifiant de la série à ton Service pour qu'il aille récupérer les données dans le bon repo et c'est terminé. Je vais m'avancer un petit peu mais en ~500 lignes (je compte les sauts de lignes) tu as tout ce qu'il faut (je compte pas les choix de réponses évidemment).

      Pour la deuxième question, en reprenant mon architecture juste au dessus, on pourrait avoir une autre méthode answer(value: Int): Bool qui, en fonction de la validité de la réponse, signifie au Repo qu'il faut incrémenter une valeur. On pourrait (devrait) même créer un Repo à part servant juste à stocker les scores des différentes séries. (Utilise UserDefault)

      En faisant ça en reprenant ta méthode, tu peux tout simplement, à chaque ViewController, faire un get puis un set sur UserDefaults avec l'identifiant de la série comme clé. A la fin tu n'as plus qu'à récupérer la valeur.

      -
      Edité par Geda 3 octobre 2019 à 16:08:08

      • Partager sur Facebook
      • Partager sur Twitter

      Variable commune a tout les viewController

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown