0
votes

Comment convertir la séquence en tableau ou y a-t-il une fin de séquence dans Swift?

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. xxx

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 () est appelé infiniment plusieurs fois.
Je pensais que nil dans suivant () est un indicateur naturel de la fin de la séquence. Mais apparemment ce n'est pas.


6 commentaires

C'est un peu étrange, avez-vous vraiment un test une séquence qui fournit test 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 était juste le nom de iteratorprotocol avant Swift 3. C'est étrange car tableau (test (5)) entraînerait [Test (5), TEST (6), TEST (7), TEST (8), TEST (9)] , 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


3 Réponses :


2
votes

auto.Id ne change jamais, il n'atteint jamais 10 .


4 commentaires

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}


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



1
votes

Cela devrait être quelque chose comme ça xxx

un autre exemple xxx


6 commentaires

Vous créez inutilement une nouvelle instance sur chaque itération. ID de garde <10 ore {revenir nil} id + = 1 retourne auto


@Leodabus mis à jour.


Je pense que les deux exemples sont bons, l'un utilisant l'opérateur ternaire et l'autre juste si sinon 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 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



0
votes

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. xxx


1 commentaires

Je le simplifierais en supprimant le test de la séquence entièrement. Il suffit de générer les numéros, alors simplement .map (test.init) . Ou eeeeeeeven plus simplifié, juste: (5 ... 9) .map (test.init) .