• slidebg1

Generics en Swift 4


Los Generics permite tener tipos y funciones reutilizables que pueden trabajar con cualquier tipo, sujeto a los requisitos que se definan. La programación genérica se centra más en el algoritmo que en los datos. La idea es generalizar las funciones para poder utilizarlas en más de una ocasión. Son una de las características más importantes de Swift, y mucha de la librería de Swift está construida con código genérico.

 

 

Pongamos un ejemplo, si queremos intercambiar dos variables del tipo Int la función sería:

 

Creamos dos variables y llamamos a la función para intercambiar los valores y los mostramos por consola:

 

El resultado es: 

 

Si quisiéramos hacer lo mismo con dos variables de tipo String tendríamos que crear una función igual a la anterior donde las variables fueran String en lugar de Int, ya que si intentamos introducir dos variables diferentes a las declaradas tendríamos un error en la compilación. La lógica de las funciones es la misma, la única diferencia es el tipo de variable que utilizamos en cada una de ellas. Aquí es donde introducimos los Generics.

 

Se puede observar que el cuerpo de la función es la misma pero la primera línea es diferente. La versión genérica de la función utiliza un placeholder para los tipos, llamado “T” en este ejemplo, en lugar del tipo de variable que es. Este nombre no indica el tipo que debe ser pero nos dice que ambas variables deben ser del mismo tipo, sea lo que sea “T”.

 

Otra diferencia es que en la función genérica el nombre va seguido del placeholder (T) dentro de paréntesis angulares (< T >). Estos paréntesis le dicen a Swift que T es el placeholder del tipo dentro de la función. Como T es un placeholder, Swift no busca un tipo real llamado T.

 

A la función genérica se le llama de la misma forma pero esta vez podemos pasar dos variables de cualquier tipo.

 

El resultado es:

 

 

Funciones genéricas

 

Con el ejemplo anterior hemos visto las funciones genéricas. Tras el nombre de la función se escribe un placeholder que indica el tipo que se usa en la función. El parámetro de tipo < T > define estas funciones como genéricas. Los tipos del placehoolder se reemplazan con tipos reales durante el tiempo de compilación. Por lo tanto, el tipo real se determinará cada vez que se utilicen las funciones.

 

Si quisiéramos tener listas de diferentes productos, objetos, etc. tendríamos que crear diferentes objetos y estructuras. Mediante los genéricos, simplificamos el problema y lo tenemos todo dentro de una misma estructura. De la misma manera que con las funciones, declaramos un placeholder tras el nombre de la estructura que indica el tipo.

 

De esta forma tenemos las mismas extensiones en ambas estructuras y podemos utilizarlas de la misma forma.

 

Vemos un ejemplo:

 

El resultado es:  

 

 

Subíndices genéricos

 

 

En Swift 4, los subíndices pueden ser genéricos y podemos usar cláusulas genéricas where. En nuestro uso, el parámetro de los índices tiene que conformar el protocolo de la secuencia. Desde Apple doc, "La cláusula genérica donde requiere que el iterador de la secuencia debe atravesar elementos de tipo Int." Esto asegura que los índices de la secuencia sean del mismo tipo que los índices utilizados en el almacenamiento.

 

Conclusiones

 

Como se ha podido comprobar, los genéricos son muy poderosos y son capaces de satisfacer los requisitos con facilidad. Librerías de Swift como Array y Dictionary son genéricas. En la documentación de Apple podréis encontrar más información acerca de los genéricos:

 

Fuente: 

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Generics.html

 



Públicado el 18/10/2017

Comparte este post:

CATEGORÍAS: Aprendizaje Desarrollo Tendencias