Home » Noticias » Apple lanza la versión 1.2 del lenguaje Swift y analizamos sus novedades
Apple Swift 1.2

Apple lanza la versión 1.2 del lenguaje Swift y analizamos sus novedades

Hasta esta tarde, lo último que sabíamos de Apple en cuanto a desarrollo era que hace unos días lanzaron la beta número 5 de iOS 8.2, la primera versión que incorpora funcionalidad para el futuro Apple Watch que será lanzado en abril. Pero cuando todos salíamos de la oficina nos hemos topado con una enorme sorpresa: el lanzamiento de la primera beta de iOS 8.3 y Xcode 6.3. La mayor sorpresa iba dentro: Swift llega a la versión 1.2 de su especificación.

Lo primero a notar es que esta nueva especificación no es compatible con la anterior, por lo que requerirá la adaptación de gran parte del código. No obstante, el nuevo Xcode 6.3 Beta incorpora la posibilidad de convertir casi todo el código con una opción de migración. Si vamos a Edit > Convert > To Swift 1.2, el programa hará gran parte del trabajo por nosotros.

Desde ya, si tienes cuenta de desarrollador en Apple, puedes descargarte esta nueva versión para empezar a probar, con la tranquilidad que hasta que Xcode 6.3 e iOS 8.3 no sea publicado oficialmente, seguiremos trabajando como hasta ahora usando la especificación 1.1 en la que han sido construidas miles de apps ya publicadas. Con lo que llamamos la actual versión en producción del lenguaje.

Novedades en rendimiento y compilación

Estas son las novedades más destacadas de las que Apple nos informa a través de su documento oficial de novedades:

Una de las más importantes no se refiere al lenguaje en sí, si no al rendimiento del mismo. Swift ahora soporta compilar los proyectos de manera incremental, de forma que no volverá a compilar aquellos fuentes que no hayan cambiado si se ha aplicado algún cambio.

Este algoritmo está aun en fase de prueba, por lo que al usar un análisis de dependencias de los archivos bastante conservador, es probable que compile más de lo que debería. Apple nos insta a que si encontramos algún problema con algún fichero que no se re-compile informemos de un bug o intentemos hacer un Product > Clean para forzar la compilación de todo el target completo.

No obstante, un vistazo por Twitter buscando impresiones del nuevo Swift, más las que nosotros hemos podido verificar, nos transmiten una importante y más que notable mejora en el rendimiento del lenguaje, en su compilación y una reducción drástica de más del 75% de los errores comunes de trabajo como los fallos del asistente de código.

Novedades del lenguaje Swift 1.2

En cuanto a las novedades del lenguaje en sí, algunas de las cosas más destacada son, por ejemplo, que se ha incorporado un nuevo tipo de dato de colección: el set. Es una versión unida al tipo NSSet de Objective-C, al igual que los Array o Dictionary en Swift lo están a NSArray y NSDictionary, creando un vínculo entre tipos.

El uso de los optionals bindings se ha mejorado permitiendo la posibilidad de anidar en la estructura if let más de una condición separada por comas e incluso incluir la cláusula where para evaluar condiciones secundarias.

De esta manera se incluye una interesante funcionalidad de anidamiento de condiciones booleanas y de evaluación conjunta de opcionales. Algo que evita la temida “pirámide del mal” que es como comúnmente se conoce al algoritmo que encadena if dentro de otros, terminando por formar una gran pirámide muy difícil de mantener.

Esto significa que este if ejecutaría el código asociado en caso que foo(), bar() y baz() sean opcionales, que contengan valores válidos y no algo vacío (un nil) para almacenarse en a, b y c, además que se cumpla la condición que el valor de foo() sea menor que el de bar(). Como vemos es infinitamente más práctico y uno de los cambios más aplaudidos por la comunidad de desarrolladores.

Ahora se permite el uso de métodos y propiedades de tipo estático (static) en las clases. El uso está permitido en aquellas clases que usan almacenamiento global y se inicializan en modo lazy al ser accedidas por primera vez (como si se tratara de una variable global). De igual manera, los tipos requeridos por un protocolo son declarados ahora como static en vez de class.

Se permiten las extensiones de Objective-C, por lo que en el caso de un bloque o un puntero a una API de Objective-C, se podrá indicar su posible nulabilidad. De esta forma, podemos importar APIs de Objective-C sin tener que indicar el tipo de opcional desempaquetado implícito, ImplicitlyUnwrappedOptional.

El casting de tipos con el modificador as ahora puede ser validado como opcional desempaquetado usando as!, de forma que así indiquemos claramente en nuestro código qué tipo de conversiones pueden fallar. Esto es importante porque se han eliminado las conversiones implícitas entre las clases unidas de Objective-C, como NSString, NSArray y NSDictionary. Estas conversiones solo se han mantenido desde los tipos de Swift hacia Objective-C, pero no al contrario.

Quiere decir que ya no podremos asignar un NSString a un String de manera directa (como hasta ahora), sino que habrá que hacer un casting o conversión con as String del tipo NSString. Igual con los arrays o diccionarios. Pero sí podemos hacerlo al contrario y si asignamos un String a un NSString, se hará sin problema ya que la conversión implícita funciona en dicha dirección.

Otra de las grandes novedades es que el tipo constante let, ahora admite una inicialización vacía para una posterior carga del valor. No se puede mutar o re-asignar a otro tipo una vez declarada, pero sí le puede dar valor después. El ejemplo que da Apple es:

Esto quiere decir que nosotros definimos x como una constante de tipo, por ejemplo, String. Como ya la hemos definido, esta variable no podrá mutar y usarse como otra cosa o cambiar su tipo. Pero x, que es un constante de tipo String y punto, no tiene valor aun y tampoco puede usarse. Más adelante, podemos asignarle dicho valor y una vez inicializada ya no podrá modificarse dicho valor y sí podrá usarse.

Es como una especie de construcción de constantes en dos pasos. E insistimos: es imprescindible que antes de usar dicha constante esta esté correctamente inicializada con un valor, pues si no provocará un error grave.

ATENCIÓN: Existe un bug en Xcode 6.3 Beta 1, en los Playground, por el que esta nueva forma de tratar las constantes no funciona. El intérprete evalúa correctamente la declaración sin asignar valor, pero luego nos da error a la hora de asignar el valor. Esto es debido a que el playground funciona en el denominado entorno global, fuera de cualquier ámbito de función o clase. La única forma de hacer funcionar esta nueva característica en esta versión es acotar en una función la variable y su asignación, por ejemplo.

Otro interesante añadido es que el uso de funciones curried, por las que el valor de retorno de las mismas es otra función en sí misma, admiten ahora el uso de etiquetas en los parámetros para facilitar la forma que son invocadas.

Todo esto sin olvidar la infinidad de depuraciones, correcciones y la nueva versión del compilador LLVM que llega a la versión 6.1.0. Es increíble ver cómo la comunidad que ha probado esta nueva versión, en general está muy entusiasmada viendo los rendimientos y estabilidad que tiene ahora Swift, y eso que está en estado beta todavía.

Swift 1.2, ¿y ahora qué?

La primera pregunta que se hará todo el mundo es, ¿y ahora qué? ¿tengo que re-aprender el lenguaje? Sí y no. Desde luego esta nueva especificación viene a depurar y cerrar mejor el lenguaje (que recordemos no tiene ni un año de vida pública). Sin duda los añadidos son muy prácticos y muchos extraordinariamente bien recibidos.

Pero no hay que olvidar que ahora mismo Xcode 6.1 y Swift 1.1 son versiones de explotación que permiten enviar apps tanto a la Mac App Store como a la App Store de iOS, mientras que esta versión 6.3 aun está en beta y pasarán meses antes que pueda usarse para actualizar o corregir apps.

Si usáis un gestor de versiones os aconsejamos que creéis un nuevo branch para Swift 1.2, trabajéis con él, adaptéis el código y esperéis. Todavía tiene que ver la luz iOS 8.2 (la versión anterior) por lo que Apple nos está diciendo que sí, que lo tengamos en cuenta pero con calma. De hecho, el principal motivo de esta versión no esperada 8.3 no es más que evolucionar Swift. Además, estamos en la primera beta y llegarán más cambios en el lenguaje hasta cerrar la especificación final.

Con respecto a nuestro libro de Swift, por supuesto que estará preparado para Swift 1.2, pero en su momento. En su inminente salida, dará solución al software que está al alcance de la gente a día de hoy y que sirve para publicar apps, porque esta nueva versión 1.2 aun no sirve para ello. Como hemos dicho, está en versión beta y promete más cambios y depuraciones.

Cuando Swift 1.2 sea oficial, aquellos que hayan comprado el libro recibirán una actualización del mismo adaptando su contenido a lo que en ese momento sea la especificación en producción, la usada para producir apps o juegos y enviarlos a la App Store o Mac App Store.

Así que si tenéis cuenta de desarrollador, ya podéis bajar Xcode 6.3 Beta y probar esta nueva versión. Como siempre, la mejor forma de aprender es experimentado sin miedo. Por lo tanto, y como siempre, 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

Portada Vídeo News

Apple Coding News llega a YouTube

Los boletines de noticias de Apple Coding llegan a YouTube. Descúbrelos y disfruta la mejor forma de seguirnos y estar al día. La más completa. Una forma única de no solo oír las noticias del mundo del desarrollo como nadie más te las cuenta, también podrás descubrir todos los detalles detrás con el apoyo visual del formato que solo YouTube permite. Una nueva experiencia Apple Coding.