Singletons: un peu, beaucoup, à  la folie, pas du tout

2»

Réponses

  • Le problème du Singleton je le vois beaucoup aussi quand il faut faire du découpage de code pour par exemple créer des modules sur des services d'une application par exemple.


     


    Je suis donc comme Ceroce, j'essaie de passer par l'injection de dépendance mais il reste des parties où je continue l'utilisation des Singletons car je les juges plus simple dans une certaine situation. Par exemple, quand j'a utilisé le Multipeer Connectivity, j'ai préféré créer un singleton pour gérer les entrées et sortie de l'API car elle est globale à  mon application.



  • Après j'avais également pensé à  mettre une propriété calculé dans une extension de la classe UIView que j'aurais pu surcharger dans le cas d'une vue qui aurait un gap spécifique. 




     


    Bah en fait non... On ne peut pas surcharger une propriété calculée déclarée dans une extension.  ::)

  • Joanna CarterJoanna Carter Membre, Modérateur

    Jérémy, je ne comprends pas pourquoi tu as fait le truc avec UIProperty, juste pour avoir une constante ?


     


    Pourquoi pas utiliser une vraie constante ?


     


    Ou, si tu voulais avoir un type comme "namespace", tu pourrais faire :



    internal struct UIProperty
    {
    internal static let gap: CGFloat = 8.0
    }


  • Pourquoi pas utiliser une vraie constante ?




     


    Tu as entièrement raison c'est complètement débile.


    Mais je vais passer par une propriété dans l'extension d'uiview.

  • Joanna CarterJoanna Carter Membre, Modérateur

    Pourquoi sur UIView ? Tu veux cette fonctionnalité sur n'importe quelle vue ?


     


    Si ce n'est que pour les vues spécifiques, tu irais mieux en déclarant un protocol et l'implementer dans chaque vue applicable



    protocol LayoutPropertyProvider
    {
    static var gap: CGFloat { get }
    }


    class MyView : UIView, LayoutPropertyProvider
    {
    static let gap: CGFloat = 8.0
    }
  • Ouai mais ça me fait chier de déclarer la variable dans toute mes vues... Si après je veux changer la valeur, je devrais la modifier unitairement ici et là ...


  • Joanna CarterJoanna Carter Membre, Modérateur

    Dans ce cas là  :



    protocol LayoutPropertyProvider
    {
    static var gap: CGFloat { get }
    }


    extension LayoutPropertyProvider
    {
    static var gap: CGFloat
    {
    return 8.0
    }
    }


    class MyView : UIView, LayoutPropertyProvider
    {
    }

    {
    print(MyView.gap) // 8.0
    }


    class MyView : UIView, LayoutPropertyProvider
    {
    static let gap: CGFloat = 12.0
    }


    {
    print(MyView.gap) // 12.0
    }
  • Joanna : J'achète ! 


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