Want to create interactive content? It’s easy in Genially!

Get started free

MOB | Swift | 06. Structs, Classes y Herencia

Valentina Aragona

Created on June 27, 2023

Start designing with a free template

Discover more than 1500 professional designs like these:

Practical Presentation

Smart Presentation

Essential Presentation

Akihabara Presentation

Pastel Color Presentation

Modern Presentation

Relaxing Presentation

Transcript

Closures

Closures

Objetivos de Aprendizaje

Luego de navegar esta cápsula, deberás ser capaz de hacer lo siguiente:

  • comprender qué son las closures en Swift;
  • identificar las funciones como closures;
  • escribir closures con la sintaxis shorthand;
  • usar closures como parámetro de funciones;
  • pasar una closure como parámetro de función como trailing
  • closures;
  • capturar y usar datos dentro de las closures;
  • y conocer el término escaping en las closures y definirlas como tal.

Índice

3. Varios

2. Closure como argumento a una función

1. Closure

6. Escaping closures

5. Map, Reduce, Filter

4. Captura de las variables del contexto

¿Qué es un closure?

Una closure es un bloque de código que puede ser pasado entre funciones o asignado a variables. Muchos otros lenguajes llaman a esta característica Lambda Expression o simplemente Lambda.

Las librerías de Swift más importantes están pensadas para trabajar con closures. Un dominio de las closures es necesario para ser desarrollador Swift.

Actividad de repaso

¡click aQUÍ!

Closure como argumento a una función

En el siguiente ejemplo, usaremos la función sorted(by:) de las librerías estándar de Swift, que se utiliza para ordenar elementos. sorted(by:) recibe una función/closure para establecer el criterio de orden. Este es un ejemplo de una función (sorted(by:)) que recibe como parámetro otra función/closure (mayorAMenor), la cual recibe 2 Stringy. Retorna true si el primer argumento debe ser ordenado antes que el segundo argumento; en caso contrario, retorna false.

Completemos ahora el ejemplo anterior: a continuación, se tiene una función dentro de una función. La función de afuera ordernaAlReves recibe un array de palabras y lo retorna ordenado al revés. Para ordenar, usa la función sorted(by:) que acabamos de ver:

En el primer ejemplo, a sorted(by:) le suministramos una Closure, mientras que en el ejemplo que acabamos de mostrar, le suministramos una función.

Inferencia de tipos por el contexto

Retorno implícito

Asignar a closure una variable

Nombres de argumentos abreviados

Trailing closures

Actividad de repaso

¡click aQUÍ!

Captura de las variables del contexto

Las closures capturan y mantienen las variables del contexto donde fueron definidas. El siguiente ejemplo muestra cómo la función interna incrementa “captura” las variables total y cant definidas en la función externa crearIncrementador. Este ejemplo usa una función dentro de una función. Recuerda que al inicio de la cápsula se indicó que una función dentro de otra función es un caso especial de una closure con nombre.

Actividad de repaso

¡click aQUÍ!

Estas tres funciones se aplican sobre colecciones y son muy usadas en las diferentes aplicaciones realizadas con Swift. Cada una de ellas recibe como parámetro una closure que especifica el comportamiento que debe darse para transformar la colección.

Map, Reduce y Filter

MAP

REDUCE

FILTER

Escaping closures

Las escaping closures son usadas para suministrar el código que se deberá ejecutar al completarse (con éxito o fracaso) una operación asincrónica. Este tipo de código, a veces, se denomina completion block o completion handler. Cuando pasamos como argumento una closure a una función, decimos que la closure escapa a la función cuando es invocada luego de que la función retorna: la closure “sobrevive” a la función. Para declarar una escaping closure la sintaxis es anteponer @escaping al tipo de parámetro. Supongamos que se tiene una función que descarga y procesa un PDF:

Actividad de repaso

¡click aQUÍ!

¡Llegaste al final de este tema!

¡Nos vemos en la próxima!