Cas de Switch Swift: l'avertissement par défaut ne sera jamais exécuté

Sur Xcode 7b2 avec Swift 2 code, j'ai suivantes:

dans le cas d'un switch, le compilateur renvoie l'avertissement suivant:

Default will never be executed

le code:

switch(type) {
  case .foo:
    return "foo"
  case .bar:
    return "bar"
  case .baz:
    return "baz"
  default:
    return "?"
}

Pourquoi y aurait-il un avertissement ?

16
demandé sur Matthieu Riegler 2015-07-06 02:25:11

3 réponses

je viens de comprendre pourquoi :

L'objet que j' "sous tension" est un enum et mon enum a seulement 3 entrées : .foo, .bar,baz.

le compilateur obtient qu'il n'y a pas besoin d'un défaut car chaque possibilité de enum se fait tester.

45
répondu Matthieu Riegler 2015-07-05 23:27:58

cela pourrait être parce que type est un enum avec 3 cas et le compilateur sait que la déclaration switch est exhaustive donc vous n'avez pas besoin d'un default déclaration afin de traiter tous les cas possibles.

3
répondu Qbyte 2015-07-05 23:29:06

je pense que cet avertissement viole l' ouvert-fermé le principe. Lorsque vous ajoutez une valeur enum plus tard, la valeur par défaut sera manquante, et vous ne pouvez pas prédire ce que votre code fera. Donc vous devez changer aussi cet endroit. De toute façon, utiliser switch() viole ce principe.

3
répondu Christian Aberger 2015-10-06 15:28:35