Swift constantes: Struct ou Enum
Je ne suis pas sûr ce qui à la fois sont de mieux définir des constantes. Une structure ou un enum. Une structure sera copié à chaque fois que je l'utilise ou pas? Quand je pense au sujet d'un struct avec static let
constantes, il n'a pas de sens qu'il sera copié tous les temps, à mon avis. Mais si elle n'est pas copié puis il n'a pas d'importance ce que je prends?
Quels sont les avantages du choix d'une structure ou enum?
Francisco de dire l'utilisation Struct l'.
Ray Wunderlich dire utiliser l'Enum. Mais je n'ai pas la justification.
- Une justification est dans l'article lié: "L'avantage de l'utilisation d'un cas moins énumération, c'est qu'il ne peut pas accidentellement être instancié et fonctionne comme un simple espace de noms".
- OK qui paraît logique. Je dois donc utiliser les énumérations dans 90% de mon cas. Et dès que quelque chose ont besoin d'être instancié ou être variable, j'utilise une struct. - Il Correct?
- Pourquoi ne pas vous définir dans les classes qui l'utilisent? Pourquoi avez-vous besoin de placer toutes les constantes dans une même structure? Vous pouvez toujours avoir les dans un fichier si vous utilisez des extensions. Si vous décidez entre enum et struct je dis ni de l'architecture, de point de vue.
- Parce que j'ai besoin d'un cadre que je puisse les intégrer dans une grande partie de mes projets. Je vais avoir besoin d', les mêmes constantes dans tous les d'entre eux. Donc je ne veux pas l'écrire plusieurs fois.
- Je ne suis pas contre des constantes, mais je vous dis qu'il n'est pas nécessaire de les mettre tous dans une structure commune/enum si elles n'ont rien en commun.
- Je ne veux pas mettre tous ensemble dans le même cadre, une énumération ou structure. Il est en fait plus intéressé à construire certaines structures. Par exemple, il pourrait être un cadre de stockage de couleurs, ou quelque chose comme ça, d'une société. Et ceux-ci doivent être les mêmes dans toutes les applications.
Vous devez vous connecter pour publier un commentaire.
À la fois les structures et les énumérations de travail. Comme un exemple, les deux
et
de travail et de définir une propriété statique de la
PhysicalConstants.speedOfLight
.Re: struct seront copiés à chaque fois que je l'utilise ou pas?
Les deux
struct
etenum
sont les types de valeur de sorte que ne s'appliquent les énumérations ainsi. Mais c'est hors de propos iciparce que vous n'avez pas à créer de la valeur à tous:
Propriétés statiques (également appelé type propriétés) sont des propriétés du type lui-même, et non d'une instance de ce type.
Re: Quels avantages a le choix d'une structure ou enum?
Comme mentionné dans le lié à l'article:
Ainsi, pour une structure,
crée un (inutile) de la valeur de type
PhysicalConstants
, maispour les cas moins énumération, il ne parvient pas à compiler:
private init() {}
à laStruct
exemple, il tiendra aussi "l'avantage" de ne pas être en mesure d'être accidentellement instancié à la volée. (Naturellement, ce "parti" pourrait être contournée par certains dev-utilisateur en incluant un initialiseur dans une extension de laStruct
: mais si nous avions pour une raison quelconque préfèrent utiliser unStruct
dans un "pur espace de noms" de la mode, plutôt que d'uneenum
, puis le privé initialiseur pourrait être un bon ne-pas-utiliser-comme une instance de sauvegarde à inclure).struct Constants static let speedOfLight = 300
vsenum Constants enum Light : Int case speed = 300
Pouvez-vous comparer ces dans votre réponse, vous aussi? Ou est-il une autre réponse pour que la comparaison?Voici une courte réponse à: vos constantes besoin d'être unique? Ensuite utiliser un enum, qui veille au respect de cette.
Souhaitez utiliser plusieurs constantes de contenir la même valeur (souvent utile pour plus de clarté)? Ensuite, utilisez une structure qui permet à cette.
À l'aide de Xcode 7.3.1 et Swift 2.2
Alors que je suis d'accord avec Martin de R, et le Rayon Wenderlich guide de style qui fait un bon point que les énumérations sont mieux dans presque tous les cas d'utilisation à cause d'un pur espace de noms, il y a un endroit où l'utilisation d'un
struct
atoutsenums
.Instructions de commutation
Commençons par la structure version:
À l'aide d'un struct, ce match et imprimer
Matched StaticVars.someString
.Maintenant permet de considérer les douilles combustibles enum version (en changeant seulement le mot-clé
struct
àenum
):Vous remarquerez que vous obtiendrez une erreur de compilation dans l'instruction switch sur le
case StaticVars.someString:
ligne. L'erreur estEnum case 'someString' not found in type 'String'
.Il y a une pseudo-solution de contournement par la conversion de la propriété statique à une fermeture qui retourne le type de la place.
Donc vous devez le modifier comme ceci:
Note le besoin de parenthèses dans l'instruction de cas, parce que c'est maintenant une fonction.
L'inconvénient est que maintenant que nous avons une fonction, il est exécuté à chaque fois qu'il est invoqué. Donc, si c'est juste une simple type primitif comme
String
ouInt
, ce n'est pas si mal. Il s'agit essentiellement d'une propriété calculée. Si c'est une constante qui doit être calculé et vous ne voulez calculer la fois, pensez à l'informatique dans une propriété différente et retourner que déjà la valeur calculée à la fermeture.Vous pouvez également remplacer la valeur par défaut de l'initialiseur avec un privé, et ensuite, vous aurez le même genre d'erreur de compilation de bonté comme avec les douilles combustibles enum.
Mais avec cela, vous voulez placer la déclaration de la structure dans son propre fichier, parce que si vous avez déclaré dans le même fichier, comme par exemple, un Affichage de Contrôleur de classe, la classe du fichier serait encore en mesure de accidentellement instancier un inutile instance de
StaticVars
, mais en dehors de la classe du fichier qu'il fonctionne comme prévu. Mais c'est votre appel.