Swift for-in loop: Hogyan kell használni és miért?

Ebben a cikkben megismerheti a for-in ciklust, annak felhasználási eseteit és változatait.

A bejövő hurkok feladatsor futtatására szolgálnak bizonyos számú alkalommal. Ezek a ciklusok minden olyan szekvenciát ismételnek, mint egy tömb, tartomány vagy egy karakterlánc elemei.

A bejövő ciklust is használjuk néhány ismétlődő folyamat rögzített időtartamra.

Miért van szükségünk bemeneti hurokra?

Képzelje el, hogy valaki azt mondta, hogy írjon egy programot, amely a Hello, World! a képernyőn. A megoldás a következő lesz:

 nyomtatás ("Helló, világ!")

Mi lenne, ha meggondolták magukat és azt mondták, hogy írj egy programot, amely a Hello, World! ötször a képernyőn … A loop ismerete nélkül a megoldás a következő lehet:

 print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") nyomtatás

Hmm. Időigényesnek tűnik hasonló kód ötszörös írása ugyanazon munka elvégzéséhez. Ha igen, mit tennél, ha valaki felkérne egy olyan program írására, amely a Hello, World! száz vagy akár milliószor a képernyőn?

Az egyik naiv megoldás az, hogy az printállítást megadott számú alkalommal írjuk meg. Őrültnek tűnik, igaz? Erre azonban van jobb megoldás, for-inha néhány sornyi kódot tartalmazó ciklusokat használunk :

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

Ne aggódjon a szintaxis miatt, alább fogjuk vizsgálni.

For-in Loop szintaxis

Létrehozhat egy for ciklust a Swift-ben:

 be ( ) 

A fenti ciklus egy tartományon belül ismétlődik, és a tartományból visszatérő minden elemhez változóban férhetünk hozzá. Ha nem tud a hatótávolságról, akkor nézze meg a következő cikket: Swift Ranges.

Hogyan működik?

  • Az ismételt szekvencia a.
  • Az érték a tartomány első számára van állítva, és a cikluson belüli utasítások végrehajtásra kerülnek.
  • Az utasítás végrehajtása után az a frissül, hogy tartalmazza a második értéket, és az utasítás újra végrehajtásra kerül.
  • Ez a folyamat addig tart, amíg a tartomány végét el nem éri, és a hurok leáll.

1. példa: Hogyan működik a bejövő hurok a Swift-ben

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

A program futtatásakor a kimenet a következő lesz:

Helló Világ!. Az érték 1 Hello world !. Az érték 2 Hello world !. Az érték 3

A fenti programban az iterált szekvencia 1 és 3 közötti tartomány.

Az i értéket a tartomány első számára állítjuk be (1), és az egyes iterációkban a tartomány következő számára frissítjük. Ez a folyamat a (3) tartomány végéig tart.

For-in ciklus végrehajtási lépések
Ismétlés Visszatért érték az (i) tartományból Kimenet
1 1 Helló Világ!. Az érték 1
2 2 Helló Világ!. Az érték 2
3 3 Helló Világ!. Az érték 3

A tartomány értékének elvetése egy for-in ciklusban

Ha a cikluson belül nem használja a tartomány értékét, akkor _a Swift-ben az (aláhúzás) használatával elvetheti :

 be ( ) 

2. példa: A tartomány értékének elvetése a bejövő hurokban

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

A program futtatásakor a kimenet a következő lesz:

Helló Világ! Helló Világ!

A fenti programban az iterált szekvencia 1 és 2 közötti tartomány, félig nyitott tartományú operátor (… <) miatt, amely magában foglalja az alsó határt (1), de nem a felső határt (3).

_elhanyagolja az értéket a tartományból (1), és a nyomtatási utasítás végrehajtásra kerül. A nyomtatási utasítás ismételten meghívásra kerül a következő iterációra, és a folyamat befejeződik, mert 2 a tartomány utolsó értéke.

For-in ciklus végrehajtási lépések tartományértékek nélkül
Ismétlés Visszatért érték a tartományból Kimenet
1 Selejtezett Helló Világ!
2 Selejtezett Helló Világ!

for-in hurok rögzített intervallumokhoz lépés közben

Ha olyan ciklust szeretne, amely az egyes iterációkban valamilyen rögzített értékkel növekszik, a tartomány helyett, akkor lépésszámítási módszert kell használnia.

3. példa: for-in hurok lépésmódszerrel

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

A program futtatásakor a kimenet a következő lesz:

 1 3 5 7 9 

A fenti programban a stridefüggvény visszaadja a számok sorrendjét: 1, 3, 5, 7, 9.

Az i értéket a szekvencia első számára (1) állítjuk be, és a ciklus belsejében végrehajtjuk a nyomtatási utasítást, amely "1" -t ad ki a konzolban.

A utasítás végrehajtása után az i értéke frissül egy másik értékre (3), és a nyomtatási utasítás újra meghívásra kerül. Ez a folyamat addig folytatódik, amíg a szekvencia összes eleméhez hozzá nem férnek.

For-in ciklus végrehajtási lépések a lépés segítségével
Érték Feltétel (Érték <Vég) i (kimenet)
1 1 <10 (igaz) 1
1 + 2 = 3 3 <10 (igaz) 3
1 + 2 * 2 = 5 5 <10 (igaz) 5.
1 + 3 * 2 = 7 7 <10 (igaz) 7
1 + 4 * 2 = 9 9 <10 (igaz) 9.
1 + 5 * 2 = 11 11 <10 (hamis) Megáll

Hogyan érhető el egy gyűjtemény elemeinek for-in hurok segítségével?

Tegyük fel, hogy az alábbiak szerint tömb húrja van. Ha nem ismeri a tömböt, akkor a tömböt egyetlen tárolónak tekintse, amely egynél több értéket képes tárolni. Részletesebb magyarázatért lásd: Swift tömbök.

 hadd programozásLanguages ​​= ("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).

Az érték a karaktersorozat első karakterére van állítva, és a hol feltételrel van ellenőrizve. Ha a feltétel visszatér true, akkor a cikluson belüli blokk (nyomtatási utasítás) végrehajtásra kerül, amely "I" -t ad ki a konzolban.

A utasítás végrehajtása után az érték frissül a karaktersorozat következő karakterére, és újra ellenőrzi a feltételt. Ha a feltétel visszatér false, akkor nem hajtja végre a blokkot, és az érték frissül a következő karakterre.

Ez a folyamat a karakterlánc utolsó karakterének eléréséig folytatódik.

Szűrés a bejövő hurok végrehajtási lépéseivel
Ismétlés érték érték! = „!” Kimenet
1 én igaz én
2 igaz
3 S igaz S
4 w igaz w
5. én igaz én
6. f igaz f
7 t igaz t
8. ! hamis

érdekes cikkek...