50 votes

enums indirects et structs

Pour commencer, je tiens à dire que je suis au courant il y a de nombreux articles et questions de l'intérieur, de SORTE que se référer à l' indirect mot-clé dans Swift.

Les plus populaires explication pour l'utilisation de l' indirect est de permettre récursive les structures et les énumérations.

Plutôt que de simplement savoir à propos de ce qu' indirect nous permet de le faire, je voudrais savoir comment il nous permet d'utiliser récursive les structures et les énumérations.

Questions:

Est-ce parce que les structures et les énumérations sont des types valeur et les types de valeurs n'évoluent pas bien si elles sont construites dans une structure récursive? Pourquoi?

N' indirect modifier la valeur type de comportement à se comporter plus comme un type de référence?

Les deux exemples suivants compiler l'amende juste. Quelle est la différence?

indirect enum BinaryTree<T> {
  case node(BinaryTree<T>, T, BinaryTree<T>)
  case empty
}

enum BinaryTree<T> {
  indirect case node(BinaryTree<T>, T, BinaryTree<T>)
  case empty
}

54voto

XAleXOwnZX Points 159

L' indirect mot-clé introduit une couche d'indirection derrière les coulisses.

Vous indiquez qu'une énumération de cas est récursive par écrit indirecte avant, ce qui indique au compilateur pour insérer le nécessaire de la couche d'indirection.

À partir d' ici

La partie importante de leurs structures et les énumérations, c'est qu'ils ont une taille constante. Permettant récursive des structures ou des enums directement viole le présent, comme il y aurait un nombre indéterminable de récurrences, ce qui rend la taille non constante et imprévisible. indirect utilise une taille constante référence à consulter pour une taille constante struct.

Il y a un différent entre les deux fragments de code vous montrer.

  1. Le premier morceau de code permet de s' BinaryTree<T> stockée par une référence partout où il est utilisé.

  2. Le second morceau de code permet de s' BinaryTree<T> stockées par référence uniquement dans le cas d' node. I. e. BinaryTree<T> a généralement sa valeur stockée directement, sauf pour cette explicitement indirect node des cas.

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