Variables globales

Existe-t-il un système de variables globales dans IB ?


Réponses

  • Euh .. t'as déjà  vu des variables dans IB ?

  • CéroceCéroce Membre, Modérateur

    Euh .. t'as déjà  vu des variables dans IB ?

    Si on excepte IBDesignable et compagnie.

    @Patyom: dis-nous plutôt ce que tu cherches à  faire.
  • PatyomPatyom Membre
    novembre 2017 modifié #4

    Je me suis mal exprimé.


    Quand je dois exploiter une variable déclarée et alimenté dans un "viewController" je voudrais pouvoir l'exploiter quand je suis dans un autre viewController.


     


    (Pas très français comme phrase)


  • Joanna CarterJoanna Carter Membre, Modérateur

    Du coup, c'est normale de passer la variable vers le deuxième viewController dans la méthode prepare(for:segue)


  • CéroceCéroce Membre, Modérateur
    novembre 2017 modifié #6

    Commence par étudier ça:
    https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html


    Les contrôleurs n'ont pas à  stocker de données; elles doivent se trouver dans le Modèle (couche métier).


    Ensuite passe les variables dans UIViewController.prepare(for: segue) comme indiqué par Joanna.




  • Si on excepte IBDesignable et compagnie.

     




    Oué, oué .. et les constantes modifiables dans les contraintes.

  • Tu gères la variable via un singleton.
  • Je tourne en rond, je ne saisi pas le "Singleton", c'est quoi, une classe ?


  • Joanna CarterJoanna Carter Membre, Modérateur
    décembre 2017 modifié #10

    Un Singleton et une classe ou une struct dont on ne peut que l'instancier une seule fois.


     


    Par exemple :



    public struct DataProvider
    {
    public static let shared = DataProvider()

    private init() { }

    public var infos: String = ""
    }

    Ici, on ne peut pas instancier la struct directement parce que l'init() est marqué private.


     


    Donc, il faut passer par shared qui, étant déjà  instancié par l'appel à  l'init() private, renvoie toujours la même occurrence de DataProvider.


     


    Du coup, pour l'accéder, il faut utiliser de code comme :



    {
    let mesInfos = DataProvider.shared.infos

    ...
    }

    Si on veut changer la valeur d'infos, avec une struct, il faut changer le static let pour un static var 



    public struct DataProvider
    {
    public static var shared = DataProvider()

    private init() { }

    public var infos: String = ""
    }

    Mais, avec une classe construit comme singleton, on peut laisser le static let


  • Par exemple, l'objet UIScreen permettant d'obtenir des informations sur l'écran, n'importe où dans le code est un singleton.

  • Merci à  vous,


    ça marche, j'ai saisi la manip.


     


    A une prochaine fois.


Connectez-vous ou Inscrivez-vous pour répondre.