2017-02-08 1 views
0

Y at-il un moyen de définir le type de valeur associé à l'énumération par défaut pour tous ses cas au lieu de le définir pour chacun d'entre eux comme ci-dessous?Enum avec la valeur associée du type par défaut

enum Device { 
    case phone(String) 
    case watch(String) 
    case tablet(String) 
} 

Je veux éviter de me répéter avec (String)

Répondre

1

Dans cette situation, il pourrait être plus facile de le définir comme ceci:

enum DeviceType { 
    case phone 
    case watch 
    case tablet 
} 

struct Device { 
    var type: DeviceType 
    var name: String 
    ... init, etc. 
} 

Ensuite, vous pouvez gérer le type et chaîne indépendamment les uns des autres, car si chaque cas d'enum a une chaîne, il semble que peut-être la chaîne n'est pas directement liée à la valeur enum.

+0

c'était essentiellement ma première approche, mais je voulais conserver des données supplémentaires directement dans le type enum. Est-ce une mauvaise approche? Pourquoi ? – kkris1983

+0

Je pense que cela n'a de sens que si chaque cas d'énumération nécessite des données différentes. Si la structure de données de l'appareil a toujours besoin par exemple. une chaîne de Nom puis c'est un champ séparé et l'utilisation d'une structure est plus propre car: a) elle montre que le type et le nom sont des éléments de données différents. b) il est plus extensible si à l'avenir vous devez ajouter plus de champs, sans avoir à les copier dans tous les cas. Il est logique d'avoir les données dans l'énumération si elles varient selon le cas, mais dans la situation que vous avez décrite, je pense qu'une structure est la bonne réponse. – simonWasHere

+0

merci pour l'explication – kkris1983