Swift 5.2

Swift 5.2 – callAsFunction

Una de las novedades que presenta la próxima versión de Swift, la 5.2, es que podemos llamar a los valores de tipos como si fueran funciones. Vamos a dar un repaso a esta interesante función que añade Swift 5.2

callAsFunction – O como se usa esto.

Para poder hacer uso de esta nueva característica los tipos deben implementar una función llamada callAsFunction. ¿Y cómo debe ser esta función?
  • Podemos tener tantas funciones callAsFunction como queramos
  • Puede tener o no parámetros
  • Puede devolver o no un valor
  • Puede usar trailing closures
  • Si van a modificar una estructura se marca como mutating
  • Puede hacer uso de throws y rethrows
  • Las puedes definir en una extensión para tipos ya existentes
Pero lo mejor es que lo veamos en un ejemplo
Como vemos la estructura Contador define tres versiones de callAsFunction, por lo que desde ese momento todos los valores creados a partir del tipo Contador puede usarse como si fueran una función. Es decir, que cuando declaramos var contador = Contador(valorInicial: 0) podemos usar la variable contador como una función, siempre y cuando la llamada concuerde con alguna de las definiciones de la función callAsFunction que hayamos definido. Cuando hacemos contador(10) en realidad el compilar está llamando a la función callAsFunction(_ cantidad: Int) y así sucesivamente.

¿Y qué pasa con los tipos que ya existe?

Siempre podemos definir las funciones callAsFunction en una extensión, por ejemplo, vamos a hacerlo para el tipo Int
Ahora, las variables de tipo Int puede usarse como funciones, en este caso, para añadir una cantidad al valor que tenga en ese momento el número entero.