Closure finali
Fa parte della sezione Logica e flusso del percorso Swift di Coddy. Lezione 39 di 56.
Quando una closure è l'ultimo argomento di una funzione, puoi scriverla fuori dalle parentesi. Questa è la forma trailing-closure ed è il modo in cui il codice Swift risulta naturale da leggere.
let nums = [1, 2, 3]
// Forma standard
let a = nums.map({ $0 * 2 })
// Forma con closure finale
let b = nums.map { $0 * 2 }Se la chiusura è l'unico argomento, scompaiono anche le parentesi. Ecco perché tutto ciò che hai visto finora sembra una struttura di controllo personalizzata.
Puoi scrivere le tue funzioni che accettano closure allo stesso modo:
func repeatN(_ n: Int, action: () -> Void) {
for _ in 0..<n {
action()
}
}
repeatN(3) {
print("hi")
}La forma con chiusura finale fa sì che repeatN(3) { ... }
Sfida
FacileDefinisci una funzione collect che:
- Accetta un intero
ne una closurebuilder: (Int) -> String - Chiama
builderper ogniida1an(incluso) e restituisce l’array delle stringhe risultanti
Leggi un intero da stdin, chiama collect con quell’intero usando una trailing closure che produce "i=<i>" per ogni valore e stampa il risultato unito con ,.
Per l’input 4, l’output è i=1,i=2,i=3,i=4.
Provalo tu
let n = Int(readLine()!)!
// TODO: func collect(_ n:Int, builder:(Int)->String) -> [String]
// luego llama a collect(n) { ... } e imprime el resultado unido con ","
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Conteggio e indiciMaiuscole, minuscole e rimozione degli spaziRicerca nelle stringheSuddivisione e unioneSostituzione di sottostringheRiepilogo - Verifica del nome utente4Insiemi
Creare insiemiUnione e intersezioneDifferenza e differenza simmetricaSottoinsieme e sovrainsiemeRiepilogo - Filtro per tag7Progetto - Tracciatore di abitudini
Panoramica del progettoSegna come completato10Progetto - Motore di quiz
Panoramica del progettoPorre domande2Intervalli e passi
Intervalli chiusi e semiapertiPassoMetodi degli intervalliIntervalli in switchRiepilogo - Griglia del calendario5Funzioni di ordine superiore Parte 1
MapFilterReduceConcatenare map, filter e reduceRiepilogo - Statistiche sulle paroleEsercitati da solo: Playground Swift