Menu
Coddy logo textTech

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) { ... }

challenge icon

Sfida

Facile

Definisci una funzione collect che:

  • Accetta un intero n e una closure builder: (Int) -> String
  • Chiama builder per ogni i da 1 a n (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 ","
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Playground Swift