English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Swift for-in 循环

In questo articolo, imparerai il ciclo for-in, i suoi esempi di utilizzo e le sue varianti.

Il ciclo for-in viene utilizzato per eseguire un insieme di compiti in un determinato periodo di tempo. Questi cicli esplorano qualsiasi sequenza, come gli elementi di un array, un intervallo o i caratteri di una stringa.

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

Perché serve un ciclo for-in?

Immagina che qualcuno ti chieda di scrivere un programma che visualizzi Hello, World! sullo schermo! La tua soluzione sarà:

print("Hello, World!")

E se cambiassero idea e ti dicessero di scrivere un programma che visualizzi Hello, World! sullo schermo cinque volte? Se non hai conoscenze di cicli, la tua soluzione potrebbe essere:

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

Beh, completare cinque volte lo stesso codice per fare lo stesso lavoro sembra molto耗时. Se fosse così, se qualcuno ti chiedesse di scrivere un programma che visualizzi Hello, World! sullo schermo centinaia o persino milioni di volte, cosa faresti?

Una soluzione infantile potrebbe essere di scrivere una serie di print per la次数. Sembra folle, vero? Ma, utilizzando alcune righe di codice del ciclo for-in, si può trovare una soluzione migliore:

for i in 1...100 {
	//Esce Hello World 100 volte sullo schermo
	print("Hello, World!")
}

Non preoccuparti della sintassi, ne parleremo più avanti.

Sintassi del ciclo for-in

Puoi creare un ciclo for-in in Swift come segue:

for <value> in <range> {
	<some work here>
}

Il ciclo sopra esplora una gamma, possiamo accedere a ogni elemento restituito dalla gamma nel variabile <value>. Se non sei a conoscenza delle gamme, puoi leggere l'articolo seguente:Swift Ranges.

Come funziona?

  • La sequenza iterata è una <range>.

  • Imposta <value> al primo numero della gamma e esegui la frase nel ciclo < Alcuni lavori qui >

  • Dopo l'esecuzione della frase, <value> viene aggiornato per includere il secondo valore della <range> e la frase <Alcuni lavori qui> Viene eseguito di nuovo.

  • Questo processo continua fino a raggiungere la fine dell'intervallo e interrompere il ciclo.

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

for i in 1...3 {
	print("Hello world! Valore è \(i)")
}

Quando si esegue il programma, l'output è:

Hello world! Valore è 1
Hello world! Valore è 2
Hello world! Valore è 3

Nel programma sopra, l'intervallo di sequenza da iterare è tra 1 e 3.

Il valore di i viene impostato sul primo numero della gamma (1) e aggiornato a ogni iterazione con il numero successivo della gamma. Questo processo continua fino alla fine della gamma (3).

Esegui la fase nel ciclo
Iterazione

Valore restituito dalla gamma (i)

Output
11Hello world! Valore è 1
22Hello world! Valore è 2
33Hello world! Valore è 3

Eliminazione dei valori di intervallo nel ciclo for-in

Se non si utilizza il valore di intervallo all'interno del ciclo, è possibile utilizzare (underscore _) per eliminarlo in Swift, come mostrato di seguito:

for _ in <range> {
	<some work here>
}

Esempio 2: Eliminazione dei valori di intervallo nel ciclo for-in

//Questo esempio ignora i valori e utilizza l'operatore di intervallo aperto a sinistra
for _ in 1..<3 {
	print("Hello world!")
}

Quando si esegue il programma, l'output è:

Hello world!
Hello world!

Nel programma sopra, a causa dell'uso diOperatore di intervallo aperto a sinistra(.. <),per cui l'intervallo di sequenza da percorrere è tra 1 e 2, inclusa la soglia inferiore (1) ma escludendo la soglia superiore (3).

Il sottolineato _ ignora il valore nell'intervallo (1) e esegue l'istruzione print. Viene nuovamente chiamata l'istruzione print per l'iterazione successiva, e il processo termina perché 2 è l'ultimo valore nell'intervallo.

Passaggi di esecuzione del ciclo for-in senza valore di intervallo
IterazioneValori restituiti da un intervalloOutput
1ScartaHello world!
2ScartaHello world!

Ciclo for-in con intervallo fisso

Se si desidera che il ciclo aumenti di un valore fisso (invece di un intervallo) in ogni iterazione, è necessario utilizzare il metodo stride.

Esempio 3: Utilizzo del ciclo for-in con stride

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

Quando si esegue il programma, l'output è:

1
3
5
7
9

Nel programma sopra, la funzione stride restituisce la sequenza numerica: 1, 3, 5, 7, 9.

Il valore di i viene impostato sul primo numero della sequenza (1) e viene eseguita l'istruzione print all'interno del ciclo, che nel terminale output "1".

Dopo aver eseguito questa istruzione, viene aggiornato il valore di i con un altro valore (3) e viene nuovamente chiamata l'istruzione print. Questo processo continua fino a quando vengono visitati tutti gli elementi della sequenza.

Esegui passi all'interno del ciclo utilizzando stride
ValoreCondizione (Valore < Fine)i (output)
11 < 10 (vero)1
1 + 2 = 33 < 10 (vero)3
1 + 2 * 2 = 55 < 10 (vero)5
1 + 3 * 2 = 77 < 10 (vero)7
1 + 4 * 2 = 99 < 10 (vero)9
1 + 5 * 2 = 1111 < 10 (falso)Stops

Come accedere agli elementi di un set utilizzando il ciclo for-in?

Supponiamo di avere un array di stringhe, come nel seguente esempio. Se non conosci gli array, puoi considerarli come un singolo contenitore che può memorizzare più valori. Per ulteriori dettagli, vedereArray Swift.

let programmingLanguages = ["Swift", "Java", "Go", "JavaScript", "Kotlin", "Python"]

Cosa fare se qualcuno ti dice di stampare tutti i linguaggi di programmazione?

Un metodo è utilizzare gli indici di valore programmingLanguages[0], programmingLanguages[1]... per accedere a questi elementi, ecc., fino a quando si ottengono tutti gli elementi. Ma è troppo complicato.

Quindi il ciclo diventa utile. Puoi utilizzare il ciclo for-in per l'iterazione:

Esempio 4: Accesso agli elementi di un array (raccolta) utilizzando un ciclo for-in

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

Quando si esegue il programma, l'output è:

Swift
Java
Go
JavaScript
Kotlin
Python

Nel programma sopra, la sequenza da iterare è un array di stringhe.

Il valore di language viene impostato sul primo elemento dell'array e viene eseguita la frase print all'interno del ciclo, che visualizza "Swift" nel terminale.

Dopo l'esecuzione della frase, la variabile language viene aggiornata con l'elemento successivo dell'array e viene nuovamente chiamata la frase print. Questo processo continua fino a quando si raggiunge l'ultimo elemento dell'array.

Esempio 5: Accesso agli elementi di una stringa (raccolta) utilizzando un ciclo for-in

Poiché in SwiftStringaAnche le stringhe sono raccolte, quindi puoi accedere a ogni carattere della stringa utilizzando un ciclo for.

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

Quando si esegue il programma, l'output è:

I
♥
S
w
i
f
t
!

Come accedere agli indici di una raccolta utilizzando un ciclo for-in?

Se vuoi accedere agli indici dell'array (la posizione degli elementi nell'array, ossia 0, 1, 2), devi usare il metodo enumerated:

Esempio 6: Accesso agli indici dell'array utilizzando un ciclo for-in

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

Quando si esegue il programma, l'output è:

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

In questo caso, il metodo Enumerazione restituisce un tuple (Int, String) per ogni elemento dell'array. Ad esempio: (0,Swift), (1,Java)

Utilizzando il ciclo for-in, puoi accedere uno per uno agli elementi di questi tuple. Se non conosci il Tuple (insieme), puoi vederlo semplicemente come un contenitore che può accogliere valori di diversi tipi.

Come utilizzare la clausola WHERE in un ciclo for-in per filtrare gli elementi?

Puoi anche usareWHEREla clausola WHERE filtra il contenuto del ciclo for

per value in "I♥Swift!" where value != "!" {
	print(value) // Rimuovi l'interroghetto
}

Quando si esegue il programma, l'output è:

I
♥
S
w
i
f
t

Nel programma sopra, la sequenza da iterare è la stringa (insieme di caratteri).

value viene impostato sul primo carattere della stringa e controllato con la condizione where. Se la condizione restituisce true, viene eseguito il blocco all'interno del ciclo (istruzione di print), che esce “ I” nel console.

Dopo l'esecuzione della statement, value viene aggiornato al carattere successivo della stringa e controllato nuovamente la condizione. Se la condizione restituisce false, non viene eseguito il blocco e value viene aggiornato al carattere successivo.

Questo processo continua fino a raggiungere l'ultimo carattere della stringa.

Esegui passi di filtraggio utilizzando un ciclo for-in
Iterazionevaluevalue != “!”Output
1ItrueI
2true
3StrueS
4wtruew
5itruei
6ftruef
7ttruet
8!false