Home » Análisis » Análisis Swift 2.0, novedades y cambios
Swift 2.0 Novedades

Análisis Swift 2.0, novedades y cambios

Ayer Apple lanzó un cúmulo de novedades, pero al ser la keynote para el público general, todo lo interesante a nivel de desarrollo no tuvo casi protagonismo. Pero para eso Apple hizo posteriormente la Conferencia “Platforms, State of the Union” que pudisteis seguir con nosotros, donde tocó un poco más muchísimas novedades muy interesantes que iremos detallando poco a poco.

Pero ahora, vamos a lo más interesante: Swift 2.0. ¿Qué cambios tiene la especificación? ¿Cuáles son las novedades? ¿Necesito cambiar? ¿Me sirve todo lo que he aprendido?

Lo primero que hemos de decir es que debéis estar tranquilos: Apple ha sumado muchas e interesantes novedades al sistema y ha pulido determinados aspectos cambiando mínimamente la especificación que gracias a una conversor muy bien integrado nos quitará la mayoría de problemas que tengamos adaptando nuestro código.

Vayamos paso a paso y veamos cuáles son las novedades y cambios más importantes.

Novedades en el lenguaje

Una de las cosas más interesantes que tiene el nuevo Swift es la gestión de errores. A través de un sencillo esquema de instrucciones do, catch y try, podemos acotar posibles errores dentro de un ámbito concreto e incluso crear nuestros propios tipos de errores y controlarlos.

Swift, gestión de errores

Como puede verse en el ejemplo, creamos un ciclo do y dentro de él le decimos lo que tiene que intentar que funcione con la instrucción try. Si la función se ejecuta sin problema y no da errores, pasará a ejecutar la siguiente instrucción y si no, irá al catch donde pueden capturarse errores concretos o poner un simple catch que capture todos los errores y controlarlos con un sencillo flujo de switch.

Todo está integrado con NSError y también controla y gestiona errores provocados por código hecho en Objective-C, gracias a que el tipo ErrorType de Swift está ajustado a NSError en su especificación.

Otra novedad es el control de uso de APIs de forma que el analizador de datos es capaz de ver qué se está usando de librerías o especificaciones que no cumplan con los requisitos del proyecto. Se han incluido entonces directivas de compilador que permiten acotar versiones del sistema y evitar problemas de compatibilidad y retrocompatibilidad.

Las extensiones de protocolos nos permiten ahora modificar el lenguaje y sus especificaciones a nuestra voluntad. De esta forma podemos alterar cómo se implementan las funciones o cómo se llaman, creando nuestras propias formas de invocar métodos.

Fluent Interfaces

Es lo que Apple llama la creación de interfaces con fluidez que permiten hacer más fácil de leer o entender el lenguaje.

Otra importante novedad del lenguaje es que ahora la documentación que podemos crear para nuestro código dentro de los proyectos, permite usar markdown y por lo tanto, formatear el texto, incluir imágenes, hiperenlaces… crearla con la misma vida con la que podemos crear documentación en los playground usando texto enriquecido y dándole muchas más vida.

Rich Comments Swift

Por último, la última gran novedad es la “swift-ificación” de la SDK de Apple en general. Para ello se ha modificado Objective-C de forma que muchas de las APIs ahora ya no devuelven nil con lo que no es necesario que usemos siempre opcionales, además de haber creado estructuras genéricas para Objective-C que permiten usar los tipos de Swift inyectados directamente sobre APIs en Objective-C sin tener que hacer conversión alguna. Esto supone, como ejemplo, que ya no habrá que convertir nada para enviar un NSString a una API Objective-C: podemos enviar directamente un String de Swift y la nueva especificación genérica la aceptará y gestionará.

Cambios en la implementación

Y aquí viene uno de los temas más críticos para muchos: los cambios en la especificación que hacen que tengamos que transformar nuestro código a la nueva sintaxis. Lo más importante que tenemos que entender es que el conversor de Swift de la versión 1.2 a la 2.0 hace la gran mayoría del trabajo, por lo que poco o nada nos costará adaptar y entender el nuevo código que simplemente refina formas.

Vamos a ver algunos ejemplos de algunos cambios en el mismo código:

  • La función enumerate que se usaba en los for in para obtener la tupla (key, value) de un array ahora ha dejado de ser una función global y se ha convertido en un método del array o colección.
  • La función find que se usaba para buscar elementos en una colección ha desaparecido. Ahora hay que usar un método de la propia colección llamado indexOf(). Obviamente, find devolvía verdadero o falso y ahora indexOf() devuelve el índice de un elemento, que no es lo mismo. Aunque si no encuentra nada devolverá nil.
  • La función sorted de ordenación de colecciones desaparece. En su lugar, se crea un método que pertenece a las propias colecciones llamado sort().
  • La función count ya no existe y está embebida dentro de la propia colección como una función más.
  • Al no existir la función count, el contar la longitud de una cadena cambia y ahora hemos de usar la propiedad characters de las cadenas y acceder al método count de la misma:
  • La gestión de eventos de toques en SpriteKit/SceneKit vuelve a cambiar gracias a los genéricos de Objective-C y ahora recibe directamente un objeto UITouch en vez de un Set que haya que convertir mediante casting.
  • La impresión de contenido en el terminal, println(), ahora se llama print().
  • El nuevo analizador de código es capaz de detectar cuando una variable no sufre modificación alguna en todo el código y nos insta a cambiar su tipo a let para optimizar el funcionamiento y el manejo de memoria. También detecta cuando una variable o constante no se usa más allá de su declaración y nos invita a borrarla.
  • Se elimina el uso de # en los parámetros. Las funciones ahora incluyen en su definición tanto la etiqueta de argumento externo como el propio nombre del parámetro por defecto. Esto significa que si ponemos solo un valor, el sistema tomará este como ambos. En las llamadas, a partir del segundo parámetro, hemos de indicar siempre el nombre de argumento externo, que coincidirá con el nombre del parámetro si no se ha indicado.
  • El nuevo casting de tipos detecta si el as se ejecutará con éxito porque simplemente estamos re-instaurando el tipo. Es decir: si nosotros tenemos un array con cadenas y números, todos se almacenan como NSObject. Cuando queremos recuperar la cadena haríamos un as con ? o ! en función de si preguntamos o forzamos. El nuevo analizador es capaz de ver que el casting va a ser siempre correcto y, por lo tanto, solo hemos de indicar el as.
  • Cuando en un bucle creamos una variable que nos sirva de índice, pero no la usemos, se nos recomendará usar el modificador _ en lugar de la variable que nunca vamos a usar.

Swift Open Source

El momento de mayor aplausos fue cuando Craig Federighi anunció que Swift iba a ser Open Source. Aun no lo es y hasta finales de año no lo hará, pero se convertirá en un lenguaje de código abierto en un proyecto gestionado por Apple y que usará una licencia OSI (de la comunidad oficial Iniciativa de Código Abierto) que aun está por determinar pero que será permisiva hacia las aportaciones pero con el suficiente control por parte de Apple para evitar problemas.

Swift Open Source

Swift como código abierto incluirá así mismo el compilador y la propia librería estándar del lenguaje. Será compatible con Linux además de iOS y OS X cuando sea publicado como proyecto Open Source, como hemos dicho, a finales de año. Apple aceptará contribuciones al código de Swift y de hecho, le interesa que se aporten contribuciones e intentará incentivarlas.

Teniendo en cuenta todo lo relacionado con Project Islandwood de Microsoft, los cuales ya dijeron que Swift entraba en sus planes, creo que veremos pronto el lenguaje también en Windows si Microsoft quiere aportar también a este proyecto (que estoy seguro que lo hará).

En resumen

Esto es lo que hemos visto en un primer análisis de todos los cambios. Cambios necesarios, casi mínimos y que el conversor hace en su gran mayoría. Se nota como una evolución coherente que va depurando el propio lenguaje y que usa muchas de las peticiones de la gente al respecto del mismo.

Pero ojo. Recordemos que Swift 2.0 es una versión prerelease lo que significa que puede haber más cambios (que los habrá) con las subsiguientes versiones de iOS 9 Beta. No tenemos que preocuparnos y cambiar. Seguimos trabajando como hasta ahora con la versión 1.2 porque hasta finales de septiembre u octubre, con el lanzamiento de iOS 9, esta versión no será definitiva y oficial y no permitirá enviar apps a ninguna de las tiendas.

Y aprovechamos para anunciar que nuestro libro sobre Swift, que cumple la especificación 1.2, estará en unos días disponible en la iBookstore de Apple y en la Kindle Store de Amazon. Y que mientras esperamos su publicación, ya estamos trabajando en la actualización, que será completamente gratuita para quienes hayáis comprado el libro, hacia la nueva especificación 2.0 con todos sus detalles. Podéis apuntaros en el boletín de novedades en la barra lateral para saber más del tema.

Hasta entonces, seguimos la cobertura del WWDC 2015 y os seguiremos informando. 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

Swift 3.1 ha llegado, análisis de todos sus cambios

Swift 3.1 ha llegado de la mano de la hornada de actualizaciones lanzadas por Apple. Analizamos sus cambios más importantes e incorporaciones más destacadas. Nuevas formas de convertir closures que no escapan en los que sí lo hace, conversiones seguras de números, genéricos más eficientes... descubre en nuestros análisis con ejemplos concretos todos los cambios y descúbrelos por ti mismo.

  • Pingback: Análisis Xcode 7, novedades y App Thinning | Apple Coding()

  • Pingback: Guard, nuevos controles de flujo en Swift 2 | Apple Coding()

  • damian

    Este blog sobre swift, es muy bueno. Estoy retomando el tema de desarrollo, y quiero hacerlo con swift, pero al estar la documentación casi en su totalidad en inglés dificulta y extiende esa curva de aprendizaje (que por momentos es frustrante), el haberme topado con este blog no solamente que ayuda a entender la sintaxis, sino también el ¿cómo? y el ¿por qué? al menos de las cosas que están publicando aquí. Y eso es una de los detalles que hay que resaltar. Te agradezco por tu aporte, y por la calidad de tus artículos. Saludos, leyendo el blog desde Ecuador.

    • Julio César Fernández

      Hola Damián,
      Gracias por tus palabras. Intentamos acercar de la forma más sencilla un contenido que a veces es complejo, como sabes, y ver mensajes como el tuyo nos alientan a seguir adelante.
      Mil gracias por tus palabras y saludos para Ecuador.

  • Pingback: Swift Lección 7, Structs o estructuras | Apple Coding()

  • Santiago Bernaldo de Quiros

    Muy bueno! Me ha venido perfecto para repasar las novedades de Swift 2.0. Gracias

    • Julio César Fernández

      Gracias Santiago. No te olvides de mirar el otro artículo que habla sobre sus cambios a través de las betas. Con ello te harás una idea más clara de todas sus novedades. Un saludo