Swift for-in loop: come usarlo e perché?

In questo articolo, imparerai a conoscere il ciclo for-in, i suoi casi d'uso e le varianti.

I cicli For-in vengono utilizzati per eseguire una serie di attività per un certo numero di volte. Questi cicli ripetono qualsiasi sequenza come elementi in una matrice, intervallo o caratteri in una stringa.

Usiamo anche il ciclo for-in per eseguire alcuni processi ripetitivi per un periodo di tempo fisso.

Perché abbiamo bisogno del ciclo for-in?

Immagina che qualcuno ti abbia detto di scrivere un programma che genera Hello, World! sullo schermo. La tua soluzione sarà:

 print ("Hello, World!")

E se, cambiassero idea e ti dicessero di scrivere un programma che produca Hello, World! sullo schermo per cinque volte … Senza la conoscenza del loop, la soluzione potrebbe essere:

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

Hmm. Sembra dispendio di tempo per scrivere codice simile per cinque volte per eseguire lo stesso lavoro. In tal caso, cosa faresti se qualcuno ti chiedesse di scrivere un programma che restituisca Hello, World! sullo schermo per centinaia o addirittura milioni di volte?

Una soluzione ingenua è scrivere la printdichiarazione per un dato numero di volte. Sembra pazzesco, vero? Ma c'è una soluzione migliore per questo con l'uso di for-inloop con poche righe di codice come:

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

Non preoccuparti della sintassi, la esploreremo di seguito.

Sintassi del ciclo For-in

Puoi creare un ciclo for in in Swift come:

 per in () 

Il ciclo precedente itera su un intervallo e possiamo accedere a ogni elemento restituito dall'intervallo nella variabile. Se non conosci la portata, puoi controllare l'articolo: Swift Ranges.

Come funziona?

  • La sequenza su cui si sta iterando è un file.
  • È impostato sul primo numero dell'intervallo e vengono eseguite le istruzioni all'interno del ciclo.
  • Dopo che l'istruzione è stata eseguita, viene aggiornato per contenere il secondo valore in e l'istruzione viene eseguita di nuovo.
  • Questo processo continua fino al raggiungimento della fine dell'intervallo e il ciclo si interrompe.

Esempio 1: come funziona il ciclo for-in in Swift

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

Quando esegui il programma, l'output sarà:

Ciao mondo!. Il valore è 1 Hello world !. Il valore è 2 Hello world !. Il valore è 3

Nel programma precedente, la sequenza su cui si sta iterando è un intervallo da 1 a 3.

Il valore di i è impostato sul primo numero nell'intervallo (1) e aggiornato al numero successivo dell'intervallo ad ogni iterazione. Questo processo continua fino al raggiungimento della fine dell'intervallo (3).

Passaggi di esecuzione del ciclo for-in
Iterazione Valore restituito dall'intervallo (i) Produzione
1 1 Ciao mondo!. Il valore è 1
2 2 Ciao mondo!. Il valore è 2
3 3 Ciao mondo!. Il valore è 3

Scartare il valore dell'intervallo in un ciclo for-in

Se non usi il valore dell'intervallo all'interno del ciclo, puoi scartare usando _(trattino basso) in Swift come:

 per _ in () 

Esempio 2: scartare il valore dell'intervallo nel ciclo for-in

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

Quando esegui il programma, l'output sarà:

Ciao mondo! Ciao mondo!

Nel programma precedente, la sequenza su cui si sta iterando è un intervallo da 1 a 2 a causa dell'uso dell'operatore di intervallo semiaperto (… <) che include il limite inferiore (1) ma non il limite superiore (3).

_trascura il valore dall'intervallo (1) e viene eseguita l'istruzione print. L'istruzione print viene chiamata di nuovo per l'iterazione successiva e il processo termina perché 2 è l'ultimo valore dell'intervallo.

Passaggi di esecuzione del ciclo For-in senza valori di intervallo
Iterazione Valore restituito dall'intervallo Produzione
1 Scartato Ciao mondo!
2 Scartato Ciao mondo!

ciclo for-in per intervalli fissi usando stride

Se vuoi un ciclo che aumenta di un valore fisso in ogni iterazione, invece di un intervallo, devi usare il metodo stride.

Esempio 3: ciclo for-in utilizzando il metodo stride

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

Quando esegui il programma, l'output sarà:

 1 3 5 7 9 

Nel programma sopra, la stridefunzione restituisce la sequenza di numeri: 1, 3, 5, 7, 9.

Il valore di i è impostato al primo numero della sequenza (1) e viene eseguita l'istruzione print all'interno del ciclo che restituisce "1" nella console.

Dopo che l'istruzione è stata eseguita, il valore di i viene aggiornato a un altro valore (3) e l'istruzione print viene chiamata di nuovo. Questo processo continua finché non si accede a tutti gli elementi della sequenza.

Passaggi di esecuzione del ciclo for-in utilizzando stride
Valore Condizione (valore <Fine) i (uscita)
1 1 <10 (vero) 1
1 + 2 = 3 3 <10 (vero) 3
1 + 2 * 2 = 5 5 <10 (vero) 5
1 + 3 * 2 = 7 7 <10 (vero) 7
1 + 4 * 2 = 9 9 <10 (vero) 9
1 + 5 * 2 = 11 11 <10 (falso) Fermate

Come accedere agli elementi di una raccolta utilizzando il ciclo for-in?

Supponiamo di avere un array di stringhe come di seguito. Se non conosci l'array, pensa all'array come a un singolo contenitore che può memorizzare più di un valore. Per una spiegazione più dettagliata, vedere 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).

value è impostato sul primo carattere della stringa e viene verificato con la condizione where. Se la condizione ritorna true, viene eseguito il blocco all'interno del ciclo (istruzione print) che restituisce "I" nella console.

Dopo l'esecuzione dell'istruzione, il valore viene aggiornato al carattere successivo della stringa e viene nuovamente verificata la condizione. Se la condizione ritorna false, non esegue il blocco e il valore viene aggiornato al carattere successivo.

Questo processo continua fino a quando non si accede all'ultimo carattere della stringa.

Filtrare utilizzando i passaggi di esecuzione del ciclo for-in
Iterazione valore valore! = "!" Produzione
1 io vero io
2 vero
3 S vero S
4 w vero w
5 io vero io
6 f vero f
7 t vero t
8 ! falso

Articoli interessanti...