Nozioni di base sulle closure
Fa parte della sezione Logica e flusso del percorso Swift di Coddy. Lezione 38 di 56.
Una closure è un blocco di codice autonomo che puoi passare e chiamare in seguito. La sintassi completa specifica i tipi dei parametri e del valore restituito:
let double = { (n: Int) -> Int in
return n * 2
}
print(double(5)) // 10Swift può dedurre i tipi quando il contesto è chiaro, quindi raramente scrivi la forma estesa. All'interno di map, filter ecc., la forma abbreviata è la norma:
let nums = [1, 2, 3, 4]
let doubled = nums.map { n in n * 2 }
let alsoDoubled = nums.map { $0 * 2 } // la forma più breve, $0 è il primo argomentoLe closure sono valori: puoi memorizzarle in variabili, restituirle dalle funzioni e passarle come argomenti. È proprio per questo che map funziona.
Sfida
FacileLeggi due righe di input:
- Un intero
x - Un elenco di interi separati da virgole
Definisci tre closure, ciascuna (Int) -> Int:
addXaggiungexal suo argomentosquarerestituisce l'argomento elevato al quadratonegaterestituisce l'argomento negato
Applica ogni closure a ciascun elemento dell'elenco usando map. Stampa tre righe, una per closure, con i risultati uniti da ,:
addX: ...
square: ...
negate: ...Con 10 alla riga 1 e 1,2,3 alla riga 2, l'output è:
addX: 11,12,13
square: 1,4,9
negate: -1,-2,-3Provalo tu
let x = Int(readLine()!)!
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }
// TODO: define tres closures (Int) -> Int y aplica cada una a nums con map
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 parole8Chiusure
Nozioni di base sulle closureClosure finaliCatturare i valoriRestituire closureFunzioni higher-order personalizzateRiepilogo - Costruttore di pipelineEsercitati da solo: Playground Swift