Selon la documentation:
init (_ s: s) où l'élément == S.Element, s: séquence
Crée un tableau contenant les éléments d'une séquence. P> blockQuote>xxx pré> il compile. Et ne jette même aucune erreur d'exécution.
Mais au lieu d'obtenir le tableau [5, 6, 7, 8, 9] en conséquence, je reçois une boucle infinie!suivant () code> est appelé infiniment plusieurs fois.
Je pensais quenil code> dans
suivant () code> est un indicateur naturel de la fin de la séquence. Mais apparemment ce n'est pas. p> p>
3 Réponses :
auto.Id code> ne change jamais, il n'atteint jamais
10 code>. p>
Cela change. Ici dans Suivant (): "Test (ID + 1)". Il faut atteindre 10. Je l'ai testé dans un terrain de jeu avant de poster.
Je comprends. Vous voulez probablement dire la même chose que @Harsh signifie. OK, merci pour l'indice.
Ouais. Bien que vous puissiez le réparer plus simplement avec une déclaration de repore, reporter {self.id + = 1} code>
Cela ne consiste pas à envisager une logique OP, il se traduira par 6 ... 10 au lieu de 5 ... 9 Outre le fait de créer une nouvelle instance sur chaque itération
Cela devrait être quelque chose comme ça un autre exemple p>
Vous créez inutilement une nouvelle instance sur chaque itération. ID de garde <10 ore {revenir nil} code>
id + = 1 code>
retourne auto code>
@Leodabus mis à jour.
Je pense que les deux exemples sont bons, l'un utilisant l'opérateur ternaire et l'autre juste si sinon code> instruction. :)
Okey Guys, merci pour tout le monde. Commentaires très utiles. Malheureusement, mais je n'ai que la marque d'une seule réponse comme acceptée.
@Leodabus étant donné que c'est une structure, une nouvelle instance est renvoyée de toute façon. Bien que auto code> soit plus concis.
@HARSH J'ai également posté ma propre solution à la question initiale. Jetez un coup d'œil, il pourrait être intéressant: Stackoverflow.com/a/61552477/2167345
apparaît, il y a un Fonction intégrée , qui convient parfaitement la logique de ma question initiale dans ce poste.
séquence (premier: Suivant :)
Renvoie une séquence formée de première et répétée d'applications paresseuses de la suivante. P> blockQuote>xxx pré> p>
Je le simplifierais en supprimant le test code> de la séquence entièrement. Il suffit de générer les numéros, alors simplement
.map (test.init) code>. Ou eeeeeeeven plus simplifié, juste:
(5 ... 9) .map (test.init) code>.
C'est un peu étrange, avez-vous vraiment un test
code> une séquence qui fournit
test code> s?
@ Alexander - réinstaller Monica Oui. Mais peut-être que pour cette fin, il est plus approprié d'utiliser GeneratorType au lieu de séquence. Je n'ai pas encore attris à la différence entre ces deux types de types.
@ Alexander - Réintégrer Monica Pourquoi est-ce étrange, au fait?))
generatortype code> était juste le nom de
iteratorprotocol code> avant Swift 3. C'est étrange car
tableau (test (5)) code> entraînerait
[Test (5), TEST (6), TEST (7), TEST (8), TEST (9)] CODE>, il a donc cette caractéristique "déroulante". Cela pourrait être utile, mais c'est un moyen vraiment étrange de le faire. Alors, qu'est-ce que c'est exactement que vous essayez d'atteindre?
@Alexander - Réintégration Monica Concernant GeneratorType est une information très utile, merci. En ce qui concerne la «caractéristique de déroulement», je suis d'accord. Maintenant, je comprends pourquoi cela était en effet étrange et j'ai réussi à la mettre en œuvre correctement (en ce sens) pour atteindre mon objectif réel: Stackoverflow.com / A / 61552968/2167345
@Leo Dabus J'ai également posté ma propre solution à la question initiale. Jetez un coup d'œil, il pourrait être intéressant: Stackoverflow.com/a/61552477/2167345