2 votes

Comment créer un singleton et sauter la partie de syntaxe de la propriété statique sharedInstance

Ayant le singleton suivant :

class Colors {
    static let sharedInstance = Colors()
    private init() {}
    let mainColor = UIColor.redColor()
}

Je l'appelle comme ceci dans une autre classe :

Colors.sharedInstance.mainColor

Existe-t-il un moyen de l'appeler comme ceci ? :

Colors.mainColor

Et si j'ai une struct à l'intérieur :

class Colors {
    static let sharedInstance = Colors()
    private init() {}
    let mainColor = UIColor.redColor()

    struct gradients {
        let blueToRed = UIColor.blueColor()
    }
}

La seule façon dont je peux appeler gradients est :

Color.gradients().blueColor

Si j'ajoute une propriété statique pour initialiser la struct, je peux me débarrasser des crochets, mais lors de la frappe, l'autocomplétion me montre à la fois la propriété statique et la struct :

class Colors {
    static let sharedInstance = Colors()
    static let gradientsProperty = gradients()
    private init() {}
    let mainColor = UIColor.redColor()

    struct gradients {
        let blueToRed = UIColor.blueColor()
    }
}

description de l'image

Je veux taper Colors.gradients.blueToRed

2voto

Vladislav Points 447

J'ai trouvé cette réponse. La raison des Singletons est la simplicité d'utilisation et les performances, car il n'est pas nécessaire d'instancier la classe ou la structure à chaque fois.

Aussi, les données à stocker ici ne circulent pas à travers l'application, elles ne seront pas modifiées dans l'application, ce sont juste des couleurs de base pour la réutilisabilité et peut-être quelque chose d'autre plus tard comme des constantes d'espacement pour les éléments d'interface utilisateur.

Comme mentionné ci-dessus, il n'est pas nécessaire d'utiliser des classes dans ce cas car je ne vais pas modifier les données.

Cette réponse permet la syntaxe que je recherchais:

struct Style {
    private init() {}
    static let color = Color()
    static let gradient = Gradient()
}

struct Color {
    let mainColor = UIColor.redColor()
    let secundaryColor = UIColor.blueColor()
    let textColor = UIColor.darkGrayColor()
}

struct Gradient {
    let backgroundGradient = UIColor.brownColor()
    let overlayGradient = UIColor.yellowColor()
}

Voici comment l'utiliser:

Style.color.mainColor
Style.gradient.backgroundGradient

1voto

XAleXOwnZX Points 159

Dans ce cas, il n'y a aucune raison d'utiliser un singleton, lorsque les champs statiques suffiraient :

class Colors {
    static let sharedInstance = Colors()
    static let gradientsProperty = gradients()
    private init() {}

    static let mainColor = UIColor.redColor()

    struct gradients {
        let blueToRed = UIColor.blueColor()
    }

}

0voto

A7medM Points 169

Vous pouvez utiliser des propriétés statiques pour éviter de créer un singleton :

struct Colors {
    static let mainColor = UIColor.redColor()
    struct Gradients {
        static let blueToRed = UIColor.blueColor()
    }
}

En faisant cela, vous pouvez appeler Colors.mainColor et Colors.Gradients.blueToRed.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X