Menu
Coddy logo textTech

Trailing Closures

Parte de la sección Lógica y Flujo del Journey de Swift de Coddy. Lección 39 de 56.

Cuando una clausura es el argumento último de una función, puedes escribirla fuera de los paréntesis. Esta es la forma de cierre final y es así como el código de Swift se lee de forma natural.

let nums = [1, 2, 3]
// Forma estándar
let a = nums.map({ $0 * 2 })
// Forma de clausura de cierre
let b = nums.map { $0 * 2 }

Si el cierre es el único argumento, los paréntesis también desaparecen. Por eso todo lo que has visto hasta ahora se lee como una estructura de control personalizada.

Puedes escribir tus propias funciones para que acepten clausuras de la misma manera:

func repeatN(_ n: Int, action: () -> Void) {
    for _ in 0..<n {
        action()
    }
}
repeatN(3) {
    print("hi")
}

La forma de clausura final hace que repeatN(3) { ... } se lea como un bucle integrado. Esa es la idea: las estructuras de control que construyes tú mismo se ven exactamente como las de la biblioteca estándar.

challenge icon

Desafío

Fácil

Define una función collect que:

  • Acepte un entero n y un cierre builder: (Int) -> String
  • Llame a builder para cada i desde 1 hasta n (inclusive) y devuelva el array de cadenas resultantes

Lee un entero de la entrada estándar, llama a collect con ese entero usando un cierre final que produzca "i=<i>" para cada valor e imprime el resultado unido con ,.

Para la entrada 4, la salida es i=1,i=2,i=3,i=4.

Pruébalo tú mismo

let n = Int(readLine()!)!

// TODO: func collect(_ n:Int, builder:(Int)->String) -> [String]
// luego llama a collect(n) { ... } e imprime unido con ","
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Playground de Swift