Swift for-in loop: Jak ji používat a proč?

V tomto článku se dozvíte o smyčce for-in, jejích případech použití a variantách.

Smyčky for-in se používají k určitému počtu spuštění sady úkolů. Tyto smyčky iterují nad všemi sekvencemi, jako jsou položky v poli, rozsahu nebo znaky v řetězci.

Smyčku for-in také používáme k provádění některých opakujících se procesů po pevně stanovenou dobu.

Proč potřebujeme smyčku pro vstup?

Představte si, že vám někdo řekl, abyste napsali program, jehož výstupem bude Hello, World! na obrazovce. Vaše řešení bude:

 print („Hello, World!“)

Co kdyby, změnili názor a řekli vám, abyste napsali program, jehož výstupem bude Hello, World! na obrazovce pětkrát … Bez znalosti smyčky může být vaše řešení:

 print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!")

Hmm. Vypadá to, že je náročné psát podobný kód pětkrát, aby bylo možné provést stejnou práci. Pokud ano, co byste udělali, kdyby vás někdo požádal o napsání programu, jehož výstupem bude Hello, World! na obrazovce stokrát nebo dokonce milionkrát?

Jedním naivním řešením je napsat printprohlášení pro daný počet opakování. Zní to šíleně, že? Existuje však lepší řešení s využitím for-insmyček s několika řádky kódu jako:

 for i in 1… 100 ( //outputs Hello world for 100 times in the screen print("Hello, World!") ) 

Nebojte se o syntaxi, prozkoumáme ji níže.

Syntaxe smyčky pro vstup

Ve smyčce Swift můžete vytvořit smyčku for in jako:

 pro v () 

Výše uvedená smyčka iteruje v rozsahu a my můžeme přistupovat ke každému prvku vrácenému z rozsahu v proměnné. Pokud nevíte o dosahu, můžete si přečíst článek: Swift Ranges.

Jak to funguje?

  • Sekvence, která se iteruje, je a.
  • The je nastaveno na první číslo v rozsahu a jsou prováděny příkazy uvnitř smyčky.
  • Po provedení příkazu je hodnota aktualizována tak, aby obsahovala druhou hodnotu v příkazu, a příkaz je proveden znovu.
  • Tento proces pokračuje, dokud není dosaženo konce rozsahu a smyčka se zastaví.

Příklad 1: Jak funguje smyčka for-in ve Swiftu

 for i in 1… 3 ( print("Hello world!. Value is (i)") ) 

Když spustíte program, výstup bude:

Ahoj světe!. Hodnota je 1 Hello world !. Hodnota je 2 Hello world !. Hodnota je 3

Ve výše uvedeném programu je sekvence, která je iterována, v rozsahu od 1 do 3.

Hodnota i je nastavena na první číslo v rozsahu (1) a aktualizována na další číslo rozsahu při každé iteraci. Tento proces pokračuje, dokud není dosaženo konce rozsahu (3).

Kroky provedení smyčky pro vstup
Opakování Hodnota vrácená z rozsahu (i) Výstup
1 1 Ahoj světe!. Hodnota je 1
2 2 Ahoj světe!. Hodnota je 2
3 3 Ahoj světe!. Hodnota je 3

Vyřazení hodnoty rozsahu ve smyčce pro vstup

Pokud hodnotu rozsahu uvnitř smyčky nemáte k dispozici, můžete ji zahodit pomocí _(podtržítka) v Swiftu jako:

 pro _ v () 

Příklad 2: Vyřazení hodnoty rozsahu ve smyčce pro vstup

 // This example neglects value and uses half open range operator for _ in 1… <3 ( print("Hello world!") ) 

Když spustíte program, výstup bude:

Ahoj světe! Ahoj světe!

Ve výše uvedeném programu je sekvence, která je iterována, rozsah od 1 do 2 z důvodu použití operátoru napůl otevřeného rozsahu (… <), který zahrnuje dolní mez (1), ale ne horní mez (3).

_zanedbá hodnotu z rozsahu (1) a provede se tiskový příkaz. Tiskový příkaz je znovu vyvolán pro další iteraci a proces končí, protože 2 je poslední hodnota v rozsahu.

Kroky provedení smyčky pro vstup bez hodnot rozsahu
Opakování Hodnota vrácená z rozsahu Výstup
1 Vyřazeno Ahoj světe!
2 Vyřazeno Ahoj světe!

for-in smyčka pro pevné intervaly pomocí kroku

Pokud chcete smyčku, která se v každé iteraci zvyšuje o určitou pevnou hodnotu, místo rozsahu musíte použít metodu stride.

Příklad 3: smyčka for-in pomocí metody stride

 let interval = 2 for i in stride(from: 1, to: 10, by: interval) ( print(i) ) 

Když spustíte program, výstup bude:

 1 3 5 7 9 

Ve výše uvedeném programu stridefunkce vrací posloupnost čísel: 1, 3, 5, 7, 9.

Hodnota i je nastavena na první číslo sekvence (1) a provede se tiskový příkaz uvnitř smyčky, který v konzole vydá „1“.

Po provedení příkazu je hodnota i aktualizována na jinou hodnotu (3) a příkaz pro tisk je znovu vyvolán. Tento proces pokračuje, dokud nejsou přístupné všechny prvky sekvence.

Kroky provedení smyčky na začátku pomocí kroku
Hodnota Podmínka (hodnota <konec) i (výstup)
1 1 <10 (true) 1
1 + 2 = 3 3 <10 (true) 3
1 + 2 * 2 = 5 5 <10 (true) 5
1 + 3 * 2 = 7 7 <10 (true) 7
1 + 4 * 2 = 9 9 <10 (true) 9
1 + 5 * 2 = 11 11 <10 (false) Zastaví

Jak přistupovat k prvkům kolekce pomocí smyčky pro vstup?

Předpokládejme, že máte řadu řetězců, jak je uvedeno níže. Pokud nevíte o poli, přemýšlejte o poli jako o jediném kontejneru, do kterého lze uložit více než jednu hodnotu. Podrobnější vysvětlení najdete v části Swift Arrays.

 let programmingLanguages ​​= ("Swift", "Java", "Go", "JavaScript", "Kotlin", "Python")

What if someone told you to print all the programming languages?

A way is to access those elements using index as programmingLanguages(0), programmingLanguages(1)… and so on till you get all the elements. But this is too tedious.

Here comes for-in loop to the rescue. You can iterate using for in loop as:

Example 4: Accessing elements of an array (collection) using for-in loop

 let programmingLanguages = ("Swift", "Java", "Go", "JavaScript", "Kotlin", "Python") for language in programmingLanguages ( print(language) ) 

When you run the program, the output will be:

 Swift Java Go JavaScript Kotlin Python 

In the above program, the sequence being iterated over is an array of strings.

The value of language is set to the first element of the array, and the print statement inside the loop is executed which outputs "Swift" in the console.

After the statement is executed, language is updated with the next element of the array and the print statement is called again. This process continues until the last element of array is accessed.

Example 5: Accessing elements of a string (collection) using for-in loop

Since, in Swift, strings are also collection, you can access each character in a string using for loop.

 for value in "I♥Swift!" ( print(value) ) 

When you run the program, the output will be:

 I ♥ S w i f t ! 

How to access indices of a collection using for-in loop?

If you want to access the index of the array (position of elements in an array i.e. 0, 1, 2), you need to use enumerated method as:

Example 6: Accessing indices of an array using for-in loop

 let programmingLanguages = ("Swift", "Java", "Go", "JavaScript", "Kotlin", "Python") for (index, language) in programmingLanguages.enumerated() ( print("(index):(language)") ) 

When you run the program, the output will be:

 0:Swift 1:Java 2:Go 3:JavaScript 4:Kotlin 5:Python 

Here, the enumerated method returns a tuple (Int, String) composed of the index (Int) and the value (String) for each item in the array. For example: (0, Swift), (1, Java)…

Using for-in loop, you can access these items in a tuple one by one. If you don't know about Tuple, you can simply think it as a container that can hold value of different types. For more detailed explanation, see Swift Tuples .

How to filter elements using where clause in a for-in loop?

You can also filter contents from for in loop using where clause as

 for value in "I♥Swift!" where value != "!" ( print(value) //removes exclamation sign ) 

When you run the program, the output will be:

 I ♥ S w i f t 

In the above program, the sequence being iterated over is string (collection of characters).

hodnota je nastavena na první znak řetězce a je kontrolována s podmínkou kde. Pokud se podmínka vrátí true, provede se blok uvnitř smyčky (příkaz pro tisk), který v konzole vypíše „I“.

Po provedení příkazu je hodnota aktualizována na další znak řetězce a znovu je zkontrolována podmínka. Pokud se podmínka vrátí false, blok se neprovede a hodnota se aktualizuje na další znak.

Tento proces pokračuje, dokud není přístup k poslednímu znaku řetězce.

Filtrovat pomocí kroků provedení smyčky for-in
Opakování hodnota hodnota! = “!” Výstup
1 skutečný
2 skutečný
3 S skutečný S
4 w skutečný w
5 i skutečný i
6 F skutečný F
7 t skutečný t
8 ! Nepravdivé

Zajímavé články...