Home » Swift » Swift 3.1 comienza a vislumbrarse

Swift 3.1 comienza a vislumbrarse

Mientras aun estamos haciéndonos con la versión 3 de Swift, que está entre nosotros desde el pasado 13 de septiembre, comienzan a verse los primeros pasos de Swift 3.1 con la incorporación de nuevas e interesantes funciones. Recordamos, que según la planificación de la propia Apple, la versión 3 será una versión principalmente estable que ya no sufrirá nuevos cambios en su especificación, salvo pequeños retoques.

Por lo tanto, estaríamos ante la primera versión de gran calado del lenguaje y los cambios de aquí en adelante son más añadidos que no rompen el código ya creado.

SR-1009

Existía un problema en Swift cuando se querían crear extensiones que solo afectaran a un subtipo concreto. Es decir, imaginemos que queremos crear una extensión para los Array, pero al crearla, lo que incorporemos a esta extensión afectará a todos los tipos que a su vez pueden aplicarse a este tipo de colección. No podemos acotar el tipo de dato genérico que compone el tipo Array. Esto es una imposibilidad técnica del lenguaje.

Pues ahora, a partir de la nueva versión Swift 3.1 dejará de pasar y podrán hacerse extensiones acotadas (o restringidas) a solo un tipo de dato en datos genéricos, como las colecciones.

Cuando conocemos cómo funcionan las colecciones a nivel genérico, sabemos que Element representa el genérico del que se compone el tipo Array. Por lo tanto, a partir de Swift 3.1 podremos delimitar con un where en la declaración de la extensión, para que solo se aplique lo que pongamos en dicha extensión cuando el genérico Element sea igual (como en el ejemplo) a Int o cualquier otro tipo de dato que queramos.

SE-0045

El protocolo sequence que cumplen los tipos Array (entre otros) nos permiten acceder a determinados comportamientos genéricos para aquellos tipos que lo conforman. Por ejemplo, las enumeraciones o las búsquedas dentro de los mismos. Ahora, se han incorporado un par más de funciones interesantes.

Desde Swift 3.1 podremos usar prefix(while:) y drop(while:). El primero de ellos devuelve la subsecuencia más larga que cumpla con un predicado que se le pase en el parámetro while. Mientras tanto, la última, devuelve lo que queda de la colección tras borrar de la misma la subsecuencia más larga que cumpla el predicado indicado.

Sin duda, son dos funciones muy interesantes que poco a poco van completando el lenguaje y que, lo más importante, no afectan en absoluto al mismo y su estabilidad como versión. Son simples añadidos para mejorar nuestro trabajo. Como siempre, probadlo y si queréis, podéis contarnos qué tal. Un saludo y Good Apple Coding.

Acerca de Julio César Fernández

Analista, consultor y periodista tecnológico, desarrollador, empresario, productor audiovisual, actor de doblaje e ingeniero de vídeo y audio.

Otras recomendaciones

Swift 3.1 Hoja de Ruta

Swift 3.1, hoja de ruta hasta primavera de 2017

Swift 3.1 marca su hoja de ruta de aquí a primavera de 2017 con dos grandes retos: la compatibilidad de código con la versión 3.0 y potenciar el gestor de paquetes y la integración con servidor para conseguir aun más rendimiento en soluciones como Kitura, Vapor o Perfect (entre otros). Descubre los detalles en nuestra noticia y qué nos depara esta nueva versión menor del lenguaje.